C/C++题目--strlen函数

strlen问题
题目:以下代码输出结果是多少?

char *s="hello"; printf("%d\n",strlen(s)); //只计算字符串中字符个数,不包括'\0' printf("%d\n",sizeof(s)); //s是一个指针,所以在32位机器里,是4个字节 printf("%d\n",sizeof("hello")); //"hello是一个字符串常量",有包括'\0',因此大小为6个字节

【参考答案】
5 4 6
题目:以下输出结果为多少。
char c[10]; printf("%d",strlen(c));

【参考答案】
由于c没有初始化,所以strlen无法知道其长度,输出的值是未知的。
题目:下面代码输出结果为多少?
int main() { char *p="abcde\0f"; char a[]="abcde\0f"; printf("%2d",strlen(p)); printf("%2d",sizeof(p)); printf("%2d",strlen(a)); printf("%2d",sizeof(a)); return 0; }

【参考答案】
上述代码输出结果是:5458
【解析】
strlen是字符串相关的库函数,它的作用是计算字符串的长度,当遇到'\0'时停止计算,字符串长度不包含'\0'字符。所以
strlen(p)与strlen(a)的长度都为5.其中sizeof是运算符而不是函数。sizeof(p)计算指针变量p在内存中占的大小。在32位
系统中,任何类型指针通常都占4字节大小,所以不管是char *p,还是int *p或者其他更复杂类型的指针p,它在内存中的大小
都是4.sizeof(a)计算数组a占内存的大小。通过sizeof计算数组的大小时,其结果是数组定义时指定的大小或字符串常量的长
度加1.故这里的sizeof(a)就是8.
【C/C++题目--strlen函数】strlen与sizeof的更多区别如下。
(1)strlen的结果在运行的时候才能计算出来,是用来计算字符串的长度,不是计算占内存的大小。
(2)sizeof操作符的结果类型是size_t(int类型);
(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以"\0"结尾的。sizeof还可以用函数做参数(如sizeof
(func());
(4)sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧;
(5)数组做sizeof的参数不退化(还表示的是数组),传递给strlen后退化为指针;
(6)当用于一个结构类型或变量时,sizeof返回实际的大小,sizeof操作符不能返回动态地被分派的数组或外部的数组的尺寸。

    推荐阅读