标签:
例子:
char str[20]="0123456789";
char str2[20]="00";
char str3[] = {1,2,3,4,5,6};
char str4[] = {0,2,3,4,5,6};
char *str5 = str2;
char *str6 = str4;
// 1
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
// 2
int a2=strlen(str2); //a=2;
int b2=sizeof(str2); //而b=20;
// 3
int a3=strlen(str3); //a=7;
int b3=sizeof(str3); //而b=6;
// 4
int a4=strlen(str4); //a=0;
int b4=sizeof(str4); //而b=6;
// 5
int a5=strlen(str5); //a=2;
int b5=sizeof(str5); //而b=4;
// 6
int a6=strlen(str6); //a=0;
int b6=sizeof(str6); //而b=4;
// 从第4组可以看出,如果对char数组进行strlen(),则它遇见0就会停止。
// 而从str2和str5看出,只要是字符串(包括字符串数组),不管他是不是0,strlen()都不会终止,它只有语句字符串的结束标志NULL才结束。
// 从第6组可以看出,如果将字符数组名赋给指针,任然是遇0而止
(1)故从上可知,对strlen()来说:只要是字符串或指针字符串,不管他是否包含0,尽管用strlen()就是。而如果指针地址是由字符数组赋过来的,就不能用,而如果是由数组字符串赋过来的也尽管用。
(返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。)
(2)对sizeof()来说:对数组进行sizeof,会得到数组开辟的空间的大小,而不是其实际内容所占据的大小。
(sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。)
也可参考:http://www.cnblogs.com/carekee/articles/1630789.html
标签:
原文地址:http://www.cnblogs.com/txf1949/p/4301462.html