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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen1083376511/article/details/91642944

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.

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操作符不能返回动态地被分派的数组或外部的数组的尺寸。

猜你喜欢

转载自blog.csdn.net/chen1083376511/article/details/91642944