A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏应斌 中级黑马   /  2014-4-26 20:22  /  1567 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏应斌 于 2014-4-27 09:26 编辑

在看资料时,纠结一个问题,编程输出字符串长度时,sizeof与strlen有什么区别吗,

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

7 个回复

正序浏览
gaoxinglei123 来自手机 中级黑马 2014-4-26 23:06:53
8#
sizeof是算符,不是函数。只针对字符串的话,sizeof比strlen大1;但意思完全不一样。sizeof计算的是你这个字符串所占的内存的字节数。而strlen是计算字符串包含的char 的数量。而刚好char占一字节所以sizeof才能计算字符串里的字符数
回复 使用道具 举报
例如:
char str[10]="01234";
int a=strlen(str); //a=5;
int b=sizeof(str); //b=10;

strlen的结果要在运行的时候才能计算出来,用来计算实际的长度;sizeof用来计算类型占内存的大小。
回复 使用道具 举报
sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
sizeof是返回字符串所占的内存字节数(包括字符串结尾的'\0'),

strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
    它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
strlen返回的是字符串的字符数(不包括'\0',因为'\0'表示空字符)

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1 赞一个!

查看全部评分

回复 使用道具 举报
夏应斌 发表于 2014-4-26 20:35
如果输出的字符串是以"\0"结尾,要求不包括“\0”,计算字符串长度时用strlen比较好吧 ...

嗯.是啊
回复 使用道具 举报
  1.         char a[10] = {'1','2','a'};
  2.         printf("%ld",sizeof(a)); // 打印结果等于 10
  3.         printf("%ld",strlen(a)); // 打印结果等于 3
复制代码

上面的代码就说明他们有说明区别。
strlen指字符的长度(以'\0'为结束点)
sizeof指文件或者数据占的内存(字节)
回复 使用道具 举报
如果输出的字符串是以"\0"结尾,要求不包括“\0”,计算字符串长度时用strlen比较好吧
回复 使用道具 举报
本帖最后由 cnchenys 于 2014-4-26 20:37 编辑

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

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1 淡定

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马