首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

strlen()跟sizeof()有什么区别

2013-10-27 
strlen()和sizeof()有什么区别#include stdio.h#include string.hint main(){char *sabcchar m[]

strlen()和sizeof()有什么区别
#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()跟sizeof()有什么区别
为什么strlen(m)是8,不是5.还有是不是strlen()不计'\0',sizeof()计上'\0'.char m[]={1,2,3,4,5}不会自动加上'\0',就是不以'\0'结尾吗?
为什么strlen(m)是8,不是5.还有是不是strlen()不计'\0',sizeof()计上'\0'.char m[]={1,2,3,4,5}不会自动加上'\0',就是不以'\0'结尾吗?
[解决办法]
sizeof()在编译期就由编译器计算出数值了。这也是个差别。
[解决办法]
说错了。不是静态变量,是类型明确的变量
[解决办法]
sizeof 是操作符,用于计算类型或对象所占用的空间,以 byte 为单位,在编译期完成

strlen 是函数,计算字符串的长度,遇到 '\0'结束,返回值以 byte 为单位,不含'\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

[解决办法]
http://blog.csdn.net/z1179675084/article/details/12951323
[解决办法]
http://bbs.csdn.net/topics/390618929类似的问题
[解决办法]
引用:
Quote: 引用:

strlen(m)的长度是随机的吧,把m当成了一个字符串指针,其长度为遇到后第一个内容为0的内存处.
我的机器上长度还是19呢.

不会吧,会是19.我每次测试结果都是s的长度与m的元素个数之和,就像这个例子是3+5=8

千真万确,出家人不打诳语。。。。。。

热点排行