黑马程序员技术交流社区

标题: 输出字符串长度 [打印本页]

作者: 夏应斌    时间: 2014-4-26 20:22
标题: 输出字符串长度
本帖最后由 夏应斌 于 2014-4-27 09:26 编辑

在看资料时,纠结一个问题,编程输出字符串长度时,sizeof与strlen有什么区别吗,
作者: cnchenys    时间: 2014-4-26 20:27
本帖最后由 cnchenys 于 2014-4-26 20:37 编辑

sizeof是返回字符串所占的内存字节数(包括字符串结尾的'\0'),strlen返回的是字符串的字符数(不包括'\0),因为字符串中1字符所占内存是1字节,
所以二者在返回字符串长度值是strlen(c) = sizeof(c)-1


作者: 夏应斌    时间: 2014-4-26 20:35
如果输出的字符串是以"\0"结尾,要求不包括“\0”,计算字符串长度时用strlen比较好吧
作者: 脸皮猴    时间: 2014-4-26 20:35
  1.         char a[10] = {'1','2','a'};
  2.         printf("%ld",sizeof(a)); // 打印结果等于 10
  3.         printf("%ld",strlen(a)); // 打印结果等于 3
复制代码

上面的代码就说明他们有说明区别。
strlen指字符的长度(以'\0'为结束点)
sizeof指文件或者数据占的内存(字节)
作者: cnchenys    时间: 2014-4-26 20:36
夏应斌 发表于 2014-4-26 20:35
如果输出的字符串是以"\0"结尾,要求不包括“\0”,计算字符串长度时用strlen比较好吧 ...

嗯.是啊
作者: m573555543    时间: 2014-4-26 20:39
sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
sizeof是返回字符串所占的内存字节数(包括字符串结尾的'\0'),

strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
    它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
strlen返回的是字符串的字符数(不包括'\0',因为'\0'表示空字符)
作者: 李鹏-ios    时间: 2014-4-26 22:04
例如:
char str[10]="01234";
int a=strlen(str); //a=5;
int b=sizeof(str); //b=10;

strlen的结果要在运行的时候才能计算出来,用来计算实际的长度;sizeof用来计算类型占内存的大小。
作者: gaoxinglei123    时间: 2014-4-26 23:06
sizeof是算符,不是函数。只针对字符串的话,sizeof比strlen大1;但意思完全不一样。sizeof计算的是你这个字符串所占的内存的字节数。而strlen是计算字符串包含的char 的数量。而刚好char占一字节所以sizeof才能计算字符串里的字符数




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2