C语言:用strlen输出a[5]=“china”和a[]=“china”结果怎么不一样?QAQ

阿尔芙咸 2014-12-24 02:42:56

a[5]输出是11,a[]输出是5.。。。

还有,sizeof a[5]输出是5,sizeof a[]输出是6。。。求教!
...全文
304 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdragonx 2015-01-14
  • 打赏
  • 举报
回复
strlen(a),越界了 "china"最少6个字节空间。末尾要加'\0'
draculamx 2014-12-25
  • 打赏
  • 举报
回复

char a[5];
//那么这个数组a只有5个元素,它们分别是:
// a[0],a[1],a[2],a[3],a[4]
//你要使用a[5],它实际上是超出了你定义的数组范围,直接指向了一个内存地址
//这个内存地址内容是随机的,原因就和三楼说的一样

zhgwbzhd 2014-12-25
  • 打赏
  • 举报
回复
a[5]输出是11 如果你定义了。 char a[5]; 也就是定义了5个字符的长度,在下面使用时用了a[5]这样的。 1、有些编译器会警告的。 2、即便是有些编译器不警告,你这是读取了数组a的后一个空间,是什么值都无法预计,严重时会造成程序崩溃。
阿尔芙咸 2014-12-25
  • 打赏
  • 举报
回复
我主要想问11是怎么来的啊。。。sizeof现在知道了。。。
draculamx 2014-12-24
  • 打赏
  • 举报
回复
sizeof a[5] 等于5 ,这个没什么好解释的,数组大小就是5,已经指定了 如果是这样的话:

char a[]="china";

//sizeof a[] 等于6是正常的啊,因为"china"占5个字符,最后还有一个“\0”作为结束字符。。。。sizeof统计的是数组长度
//此时,strlen[a]等于5,因为strlen函数统计的是有效字符,即整个字符串中第一次出现“\0”之前的那些字符的个数

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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