user-0 提问: strlen()和sizeof()有什么区别

回复:
user: user-1
content: 引用 18 楼 wjc19910312 的回复:[quote=引用 17 楼 wangdahu888 的回复:] [quote=引用 16 楼 wjc19910312 的回复:] [quote=引用 2 楼 wangdahu888 的回复:] char m[]={1,2,3,4,5}不会自动加上'\0'的,它是个数组呀,里面存放的什么就是什么 测试了一下如果在数组m中再加一个0到最后面就是5不是8了.如果在2后面加0，就变成2了.这是不是说遇到0就停止了，后面的被忽略了，那如果真这样元素里刚好有个0怎么办？[/quote] 数组就是数组呀，如果你想用字符串的功能可以考虑std::string类[/quote] 我的意思是说如果数组里有个0，那么用strlen时得到的值是0之前的元素的个数，而0后面的不被计入元素个数[/quote] 是的

user: user-0
content: 引用 17 楼 wangdahu888 的回复:[quote=引用 16 楼 wjc19910312 的回复:] [quote=引用 2 楼 wangdahu888 的回复:] char m[]={1,2,3,4,5}不会自动加上'\0'的,它是个数组呀,里面存放的什么就是什么 测试了一下如果在数组m中再加一个0到最后面就是5不是8了.如果在2后面加0，就变成2了.这是不是说遇到0就停止了，后面的被忽略了，那如果真这样元素里刚好有个0怎么办？[/quote] 数组就是数组呀，如果你想用字符串的功能可以考虑std::string类[/quote] 我的意思是说如果数组里有个0，那么用strlen时得到的值是0之前的元素的个数，而0后面的不被计入元素个数

user: user-1
content: 引用 16 楼 wjc19910312 的回复:[quote=引用 2 楼 wangdahu888 的回复:] char m[]={1,2,3,4,5}不会自动加上'\0'的,它是个数组呀,里面存放的什么就是什么 测试了一下如果在数组m中再加一个0到最后面就是5不是8了.如果在2后面加0，就变成2了.这是不是说遇到0就停止了，后面的被忽略了，那如果真这样元素里刚好有个0怎么办？[/quote] 数组就是数组呀，如果你想用字符串的功能可以考虑std::string类

user: user-0
content: 引用 2 楼 wangdahu888 的回复:char m[]={1,2,3,4,5}不会自动加上'\0'的,它是个数组呀,里面存放的什么就是什么 测试了一下如果在数组m中再加一个0到最后面就是5不是8了.如果在2后面加0，就变成2了.这是不是说遇到0就停止了，后面的被忽略了，那如果真这样元素里刚好有个0怎么办？

user: user-1
content: 引用 13 楼 wjc19910312 的回复:[quote=引用 1 楼 wangdahu888 的回复:] strlen(m)的长度是随机的吧,把m当成了一个字符串指针,其长度为遇到后第一个内容为0的内存处. 我的机器上长度还是19呢. 不会吧，会是19.我每次测试结果都是s的长度与m的元素个数之和，就像这个例子是3+5=8[/quote] 千真万确，出家人不打诳语。。。。。。

user: user-2
content: 引用 7 楼 AnYidan 的回复:sizeof 是操作符，用于计算类型或对象所占用的空间，以 byte 为单位，在编译期完成  strlen 是函数，计算字符串的长度，遇到 '\0'结束，返回值以 byte 为单位，不含'\0'；在运行期完成  ++

user: user-0
content: 引用 1 楼 wangdahu888 的回复:strlen(m)的长度是随机的吧,把m当成了一个字符串指针,其长度为遇到后第一个内容为0的内存处. 我的机器上长度还是19呢. 不会吧，会是19.我每次测试结果都是s的长度与m的元素个数之和，就像这个例子是3+5=8

user: user-3
content: http://bbs.csdn.net/topics/390618929类似的问题

user: user-4
content: strlen()是求实际长度， sizeof()是分配的存储空间

user: user-5
content: http://blog.csdn.net/z1179675084/article/details/12951323

user: user-6
content: 骚年还是要多看书啊。。

user: user-7
content: strlen()是求实际长度，遇到\0结束，sizeof()是分配的存储空间. 没有\0,长度是随机的。

user: user-8
content: 两个层面的概念： 字符数组 字符串（以'\0'结尾的字符数组）

user: user-9
content: 参考Linux中strlen()的源代码和gcc中sizeof()的源代码。

user: user-10
content: 引用 7 楼 AnYidan 的回复:sizeof 是操作符，用于计算类型或对象所占用的空间，以 byte 为单位，在编译期完成  strlen 是函数，计算字符串的长度，遇到 '\0'结束，返回值以 byte 为单位，不含'\0'；在运行期完成 ++

user: user-11
content: 引用 楼主 wjc19910312 的回复:#include <stdio.h> #include <string.h> int main() {     char *s="abc";     char m[]={1,2,3,4,5};     printf("%d %d %d %d\n",strlen(s),sizeof(s),strlen(m),sizeof(m));     return 0; }  为什么strlen(m)是8，不是5.还有是不是strlen（）不计'\0',sizeof()计上'\0'.char m[]={1,2,3,4,5}不会自动加上'\0',就是不以'\0'结尾吗？  sizeof测量的是占了多少内存，strlen测试的是从一个开始位置到'\0'的字节数，你说的不是5是8和内存布局有关了， 看看这个 http://blog.csdn.net/koches/article/details/7526377

user: user-12
content: sizeof 是操作符，用于计算类型或对象所占用的空间，以 byte 为单位，在编译期完成  strlen 是函数，计算字符串的长度，遇到 '\0'结束，返回值以 byte 为单位，不含'\0'；在运行期完成

user: user-13
content: 说错了。不是静态变量，是类型明确的变量

user: user-13
content: 引用 3 楼 turingo 的回复:1、strlen会一直计数，直到遇到'\0'才停止； 2、sizeof是计算数组的字节数。  [quote=引用 楼主 wjc19910312 的回复:] #include <stdio.h> #include <string.h> int main() {     char *s="abc";     char m[]={1,2,3,4,5};     printf("%d %d %d %d\n",strlen(s),sizeof(s),strlen(m),sizeof(m));     return 0; }  为什么strlen(m)是8，不是5.还有是不是strlen（）不计'\0',sizeof()计上'\0'.char m[]={1,2,3,4,5}不会自动加上'\0',就是不以'\0'结尾吗？[/quote]  sizeof应该是编译时计算静态变量的占的空间

user: user-14
content: sizeof()在编译期就由编译器计算出数值了。这也是个差别。