C-求解sizeof与strlen的区别?
char ss[100]="0123456789";
sizeof(ss)=100
strlen(ss)=10
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
char ss[100]="0123456789";
sizeof(ss)=100
strlen(ss)=10
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
strlen计算从指针所指地址或数组首地址到''之间的长度,不包括''; sizeof是C语言关键字,其作用是计算数组或指针所指向的内存块的大小。
1、sizefo 是求占用空间的大小,strlen 是求字符串的实际长度,二者是完全不同的概念。sizeof 总是以变量占用空间大小为结果,strlen 总是以''作为字符串的结束标志,''为转义字符,表示数字 0x00,而不是字符 '0'。
2、由于ss[100]预先申请了100个char所占空间大小的内存空间,当然sizeof(ss)就为100。
3、在声明ss[100]的时候,只对前10个元素赋值,所以ss[10]为默认值数字0x00。strlen(ss)在读到ss[10]为数字0x00(也就是前面所说的''),认为字符串结束,所以strlen(ss)就是10。
另外,你这个问题和另外一个问题非常像,那一个问题比你的更深入,建议你也看一下,看完后你应该就能彻底搞懂sizeof与strlen的区别了。
sizeof和strlen的区别其实还蛮多的:
(1)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
(2)sizeof是算符,strlen是函数。
(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''''结尾的。
sizeof还可以用函数做参数,比如:
short f();
printf("%dn", sizeof(f()));
输出的结果是sizeof(short),即2。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
(5)大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
(6)strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小。
(7)sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
(8)当适用了于一个结构类型或变量, sizeof 返回实际的大小,
当适用于静态空间数组, sizeof 归还全部数组的尺寸。
sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸
sizeof 是关键字,strlen是C库<string.h>提供的函数。
sizeof计算的是类型在内存中存储大小,sizeof 在编译的时候就可以求值了。例如sizeof(int)。在编译期间就能够求值,32位系统下为4个字节。如果是可变长的数组在sizeof会在运行时求值。
strlen是求字符串的长度。计算到第一个''结束。
sizeof 在C和c++中有所不同。 关于sizeof的一些牛角尖的问题可以参考这篇文章
http://blog.linjian.org/articles/sizeof-interesting-problems/