c中字符数组的问题,请高手指教

yasmong 2003-10-26 05:47:48
main()
{
char s[5]="china";
printf("%s",s);
}
我在tc2下运行时,输出的字符不只是“china",后面还有几个莫名其妙的字符,为什么呢?
...全文
155 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunjx119 2003-10-26
  • 打赏
  • 举报
回复
在vc6.0下都不能同过编译
总之字符串是要以'\0'结尾的否则会出现意想不到的问题
firedevil 2003-10-26
  • 打赏
  • 举报
回复
还是按楼上的比较好,不同的编译器有时会有不同结果。
对于这等擦边球,最好还是清晰点好
wadefelix 2003-10-26
  • 打赏
  • 举报
回复
字符串要求以'\0'结束的。
char s[]="china";这样系统会自动加上'\0'.
或者,自己赋值s[6]='\0'也可以。
TianGuangZao 2003-10-26
  • 打赏
  • 举报
回复
char s[5]="china";
s 是一个数组,而非字符串,所以它没有足够的空间来容纳 '\0', 也就是说 '\0' 丢失了。
这样的话,就没有正确的字符串结束标志了,所以就如上面大家讲的知道碰到第一个 '\0' 才停止输出,也就出现了许多垃圾字符。
David2008 2003-10-26
  • 打赏
  • 举报
回复
array bounds overflow

知道什么意思吧??
呵呵,就是已经溢出了
那当然就是奇怪的字符罗

呵呵
你把 5 改成 6 嘛,就可以了
cyh811122 2003-10-26
  • 打赏
  • 举报
回复
在数组输入出的时候,拿你那道题说先找到S的地址判断是否为'\0',如果不是就输入,然后再依次判断下一个是否为'\0',如果是就停止输出不是的话就继续输出,如果最后开赋值的前五个中都没有'\0'的话,那第个有可能是是'\0'如果是的话就不输出了,也有可能不是,如果不是的话就继续输出一个地址中的内容直到'\0',所以就输出了一些莫名其妙的字符
Hot_Forever 2003-10-26
  • 打赏
  • 举报
回复
我在dev-c++下有一个compile error:
initializer-string for array of chars is too long
所以说不要这么干
zhngxVPP 2003-10-26
  • 打赏
  • 举报
回复
确实有么名奇妙的字符,printf("%s",s);按字符串打印时,系统会自动遇到'\0'而结束打印
由于s[5]="china",字符串里没有'\0',所以系统会继续打印。
如果s[6]="china"就不会出现这种情况了,因为系统会自动赋值s[5]='\0'
LinuxPanther 2003-10-26
  • 打赏
  • 举报
回复
我感觉你这样作不好!
printf("%s",s);
S是按照字符串输出的,而在C语言中没有对数组的检查,所以它将输出到一个内存内容是“/0”的,它才停止输出。
langwuji 2003-10-26
  • 打赏
  • 举报
回复
在赫伯特.希尔特的《C语言大全》中确实不提倡,但是谭浩强的《C程序设计中》说如果是用字符串常量赋值可以不用'/0'结束,系统自己会加上;如果使用字符赋值,也可以不加,但建议加上,只是为了保持清晰。
langwuji 2003-10-26
  • 打赏
  • 举报
回复
我使用dev-C++没有这种情况。
Hot_Forever 2003-10-26
  • 打赏
  • 举报
回复
你最好还是不要这么做,毕竟程序是有隐患的,不要进行这些边缘行为。。。。。。
fenghuangling 2003-10-26
  • 打赏
  • 举报
回复
不是这个原因
刚才我调试了一下,其实输出的的确只有china,后面并没有莫名其妙的字符。
(TC2.0)
另外,C中允许char s[5]="china";这样赋值。
这种情况下S[4]='A'已经到字符串结尾了,字符串可以无结束标记'/0'
Hot_Forever 2003-10-26
  • 打赏
  • 举报
回复
数组溢出 "china"一共有6个字符呢,还有一个'\0'
这样 char s[]="china";

69,336

社区成员

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

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