社区
C语言
帖子详情
c中字符数组的问题,请高手指教
yasmong
2003-10-26 05:47:48
main()
{
char s[5]="china";
printf("%s",s);
}
我在tc2下运行时,输出的字符不只是“china",后面还有几个莫名其妙的字符,为什么呢?
...全文
155
14
打赏
收藏
c中字符数组的问题,请高手指教
main() { char s[5]="china"; printf("%s",s); } 我在tc2下运行时,输出的字符不只是“china",后面还有几个莫名其妙的字符,为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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";
青少年C++编程NOIP/CSP竞赛通关语法-
字符数组
本课程为零基础C++语法专题课,是青少儿参加信息学奥赛NOIP/CSP需要学习的语法专题课; 2、本课程每节课均配有练习题以及真题,以锻炼孩子的解题能力;... 6、本课程介绍的是
字符数组
。也是历来竞赛重要考点。
c语言给数组赋值 报错,
请
教为什么给数组赋值会报错
请
问为什么给数组赋值会报错?...
请
高手
指教
,非常感谢!!#include#include#includeintsystem(constchar*string);voidstart();voidchakan(charinfo[999][3][50],intsize);voidzengjia(charinfo...
c语言函数心得,C语言字符串函数的一些使用心得
对于C语言,爱站技术小编对C语言字符串函数的一些使用心得在此分享給各位,也
请
C语言编程
高手
多
指教
啦~那接下来就跟爱站技术频道的小编一起来了解下其
中
的详情吧。就字符串的拼接函数为例strcat.原型:extern char ...
c语言串口数据解码软件,
请
高手
指教
红外串口解码 返回的数据乱码
已结贴√
问题
点数:2回复次数:2
请
高手
指教
红外串口解码 返回的数据乱码刚做了个红外遥控解码,初学编程,写入C51程序如下,通过串口助手调试返回的遥控数据无规则,
请
哥哥姐姐们指点#include"reg52.h"#define uchar ...
用Java输出频率前k的数_JAVA编程单词频率排序输出 望
高手
指教
我编写了个,有3个错误,望
高手
指教
.代码如下:importjava.awt.*;importjava.io.*;publicclasswordexam{publ...在一个文件
中
(英文加标点),统计每个单词出现的频率,并排序输出.(用JAVA编写).我编写了个,有3个错误,望
高手
...
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章