sizeof 和strlen 的区别

huaxiangsl 2008-03-25 01:19:45
#include <stdio.h>
#include <string.h>
main()
{
char x[30];
int a,i;
gets(x);
a=strlen(x);
printf("%d\n",a);
for (i=0;i<a;i++)
printf("%c\n",x[i]);
}


#include <stdio.h>
main()
{
char x[30];
int a,i;
gets(x);
a=sizeof(x)-1;
printf("%d\n",a);
for (i=0;i<a;i++)
printf("%c\n",x[i]);
}


理论上说,输出的应该是一样的啊 但是 用 sizeof为什么后面输出有一大串怪字符呢???

只有这点区别 但结果很大不同啊
...全文
189 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaxiangsl 2008-03-25
  • 打赏
  • 举报
回复
谢谢大家了 懂了
zhoufuguo8802 2008-03-25
  • 打赏
  • 举报
回复
sizeof 计算占用空间 strlen 计算长度 不算'\0'
gets(x)输入字符串给x数组
strlen计算字符串长度
sizeof则是这个数组的长度
所以按sizeof循环的话,
字符串后面的元素也会输出,但是你的字符数组没有初始化,得到的都是随机值,
因此输出的就是乱七八糟
qiucp 2008-03-25
  • 打赏
  • 举报
回复
查看MSDN
houdongfeng 2008-03-25
  • 打赏
  • 举报
回复
同意4楼和9楼
lsmdiao0812 2008-03-25
  • 打赏
  • 举报
回复
同意4楼和9楼
abupie 2008-03-25
  • 打赏
  • 举报
回复
strlen()是库函数, 碰到'\0'结束.
sizeof()只是符号, 不是函数, 返回结构体大小.


就楼主的例子, sizeof()返回的是30.
strlen()返回的结果就很难确定了,因为楼主没有做初始化,一般情况会是gets()的字符数,但是也可能是大于30的值,不确定.

printf的时候, 由于字符串没有初始化,所以会输出乱七八糟的数据.
login_user 2008-03-25
  • 打赏
  • 举报
回复
i got it
Dogfish 2008-03-25
  • 打赏
  • 举报
回复
因为sizeof拿出来的数值是根据你定义的数组的大小,也就是说a=29,所以你输出来的时候,是输出29个字符,包括没有初始值的地方。

strlen拿出来的是里面实际有的字符数。
sdljgxb 2008-03-25
  • 打赏
  • 举报
回复
哦~~
rogina 2008-03-25
  • 打赏
  • 举报
回复
这个问题被问过相当多次了,strlen返回的是字符串的大小如char str[10] = "hello"
调用strlen(str)返回的是字符的个数即5,而sizeof(str)则是返回str数组的大小即10。。
冰矿 2008-03-25
  • 打赏
  • 举报
回复
gets(x)输入字符串给x数组
strlen计算字符串长度
sizeof则是这个数组的长度
所以按sizeof循环的话,
字符串后面的元素也会输出,但是你的字符数组没有初始化,得到的都是随机值,
因此输出的就是乱七八糟
clhposs 2008-03-25
  • 打赏
  • 举报
回复
是不是该结帖了 懂了吗?
clhposs 2008-03-25
  • 打赏
  • 举报
回复
a=sizeof(x)-1; a=29 但是数组无如果后面的没赋值就会出现乱码
clhposs 2008-03-25
  • 打赏
  • 举报
回复
sizeof 计算占用空间

strlen 计算长度 不算'\0'

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧