详解sizeof与strlen解决办法

详解sizeof与strlen
比如:
char a[100]
gets(a);
输入“ajajal”
sizeof(a)和strlen(a)分别返回几?
还有如果不是数组呢

------解决方案--------------------
sizeof返回数据类型的大小,在编译时由编译器直接按类型替换为常数
strlen是一个函数,从你输入的指针开始读取,一直到读取到0为止返回读取字符的个数
这俩完全不是一个领域内的东西,没有任何相同之处
------解决方案--------------------
	char str[100] = "abcdef";
char *p = str;
printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p));

lz觉得这个打印什么呢?答案是100 9 4
sizeof计算符计算其中的类型大小,strlen计算字符串中的字符大小(不包括结束符)
------解决方案--------------------


sizeof 是编译时就已经完成了,strlen是函数运行到时才去计算多长!

楼上的代码,运行结果应该是 100 , 6, 4,楼上是不是写错了!

char str[100] = "abcdef";
char *p = str;
printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p));

------解决方案--------------------
引用:
sizeof 是编译时就已经完成了,strlen是函数运行到时才去计算多长!

楼上的代码,运行结果应该是 100 , 6, 4,楼上是不是写错了!

char str[100] = "abcdef";
char *p = str;
printf("%d %d %d" ,sizeof(str) ,strlen(p) ,sizeof(p));
嗯,6写成9了
------解决方案--------------------
这辈子不用sizeof都没事。
------解决方案--------------------
楼主你记着一个事就好了.

sizeof是编译期就计算好的, 只有编译的时候能计算出来, 才能使用sizeof.
而strlen是计算字符串中的字符个数, 不包括null结束符.

char a[100] = "abcdef";  
因为已经指定了数组大小, sizeof自然能在编译的时候知道它占用内存大小. 即100个char大小.
又因为是char数组, strlen也能计算出其中的字符个数. 即6个字符.

char *p = "abcdef".
因为编译的时候不知道其会指向哪里, sizeof能知道也只是  char* 这个类型的指针占用的内存, 一般指针是4字节.
而strlen它不会管p指向哪里, 只会从p指向的地址开始找null结束符, 计算长度.


------解决方案--------------------
八楼盒子装球的解释很形象,九楼解释的很详细
------解决方案--------------------
strlen按运行时的实际内容判断,从开头遍历内存,找到值为0的位置,计算长度。
sizeof是编译时解决的,给出类型的尺寸,或者固定数组的尺寸。