strcat函数引起的血案
/*
http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html
参考这篇文章
-
char *a = “Hello”;Hello存放在常量区,是无法修改的。
-
通过指针只可以访问字符串常量,而不可以去改变它
-
char a[] = “Hello”;而数组存放在栈中,是可以修改的
-
Hello存放在栈中,可以通过指针去访问和修改数组内容
*/
sizeof和strlen两个函数的随想:
①sizeof的参数是数组,返回的是编译时分配的数组空间 (sizeof是运算符,值在编译时已计算好)
②strlen的参数是字符型指针(char *),当数组名作为参数传入时,实际上数组就退化为指针了。
(strlen是函数,值需要在运行时才能得出)
该函数的实际功能从代表字符串的第一个地址开始遍历,知道遇到结束符’\0’,返回长度不包括’\0’
这也就说明下面的函数为什么会将数组越界的字符串也一起显示了,strlen的限制就只是’\0’,而
且数组传入后即退化为指针,指针只是在读这些地址的值,没有修改,所以也不“违法”。
总的来说就是,数组可以越界,编译器也不会报警,至于越界使用的地址会造成什么,谁也不知道
1 | char *a= "Hello, "; |
本文标题:strcat函数引起的血案
文章作者:小师
发布时间:2016-06-07
最后更新:2022-05-04
原始链接:chunlife.top/2016/06/07/strcat函数引起的血案/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可