c语言中关于字符数组长度的问题。

假设这样定义一个字符串:charc[]={"iamhappy"},教材上说,此时数组c的长度不是10,而是11,因为字符串常量的最后由系统加上一个'\0'。然而我自己在电... 假设这样定义一个字符串:char c[]={"i am happy"},教材上说,此时数组c的长度不是10,而是11,因为字符串常量的最后由系统加上一个'\0'。
然而我自己在电脑上试了一试,定义成char c[10]={"i am happy"},最后程序运行正常,不是说数组长度是11吗,为什么我定义成10了还是能正常运行?
展开
 我来答
百度网友6fe74e2
2014-01-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
这个其实很简单,
你定义成
char c[10]={"i am happy"};
相当于
char c[10]={'i',' ','a','m',' ','h','a','p','p','y','\0'};
虽然后面的初始化时,给了11个数据,但实际上只有前10个相应赋给了c[0]到c[9]
最后一个 ‘\0’ 没有赋值给数组c了。
所以还是不会有问题。

另外,这个还与编译器有关,有的编译器这样会报错。数组超界。
与子如初见
2014-01-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

好神奇啊,事实上书上说的没有错,是你的电脑很神奇。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尛坤的海角
2014-01-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
电脑会分配临时内存单元储存‘\0’,但若果你定义了两个数组,那么这个临时单元储存就会变成第二个数组的第一个内存单元,故需要规范数组长度比实际长就为了防止出现非法访问内存单元
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Cansluck
2014-01-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
最后那个'\0'是系统自动加上去的,当长度被限定之后,且内容长度正好是数组下标长度时,数组c长度就成了10.。有点逻辑上的误解。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gmjggg
2014-01-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

有没有出来这个?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式