有关c语言中字符串结束符的问题

如果定义了一个只有3个长度的字符串,输入三个字符,那么系统会在这个字符串后面加上'\0'吗?那这个字符串的长度不就不止3个了,还有在按回车键的时候是按3个回车就结束还是2... 如果定义了一个只有3个长度的字符串,输入三个字符,那么系统会在这个字符串后面加上'\0'吗?那这个字符串的长度不就不止3个了,还有在按回车键的时候是按3个回车就结束还是2个,因为回车符是\n,所以我有点糊了,求解答 展开
 我来答
好嘞啊啊啊啊
推荐于2017-11-25 · TA获得超过2612个赞
知道大有可为答主
回答量:1860
采纳率:66%
帮助的人:1201万
展开全部
定义一个字符数组a[10]
读取字符串可以用gets() 函数
如果你输入 abc 打回车
那么就会存储 'a''b''c''\0' 回车符\n会自动转换成\0
那么字符串的长度是4
有效长度是3
更多追问追答
追问
但是如果我在定义这个字符串长度只有3呢,那abc加回车,那它长度就是4了,还是c变成\0保持3个长度?
追答
你是说字符数组是3个大小, 但是你要存“abc”字符串吗?  那么  是这样吗 
char a[3];
gets(a);
如果你输入abc回车的话
字符数组里面只能存储abc 而不能存储\0 这样存储的就不是字符串了, 因为没有\0, 而\0是字符串结尾的标志
谢应宸
2013-07-29 · TA获得超过2640个赞
知道大有可为答主
回答量:2731
采纳率:66%
帮助的人:2148万
展开全部
一般情况下字符串是存放在数组中的
数组的长度如果小于字符串长度+1则会出错

如果像这样

char buf[] = "12345"
或者
char buf[10] = “12345”
则会自动在5后补上结束符

有问题继续跟问
追问
但是如果我只定义3个长度,输入abc加回车,那储存的是abc然后系统补加一个\0变成4个长度,还是储存ab和\0,保持3个长度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
学技术无止境
2013-07-29 · 超过16用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:21万
展开全部
第一个问题,系统不会自动加上‘\0’。反而会提示错误,内存访问越界。你定义三个长度,只能存两个字符。第二个问题我没看懂你说的是什么意思。
追问
我用xcode写的代码,没有出现你说的提示错误,如果定义3个长度字符串,输入ab按回车就返回a,b,和回车 ,如果输入abc再按回车会返回a,b,c三个字符,没出现你说的只读取前两个啊?
追答
我测试了下,系统确实会自动加上‘\0’,但是这个‘\0’不包括在你定义的这个数组里面,只是在内存上来说,你数组第三个内存地址后面的一个内存地址里面被系统存进了一个‘\0’.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wuqingxin2008
2013-07-29
知道答主
回答量:13
采纳率:0%
帮助的人:18.1万
展开全部
输入三个字符,只会读取前两个,后面加“\0”。按回车键字符串不读取,换行用“\n”的话,两个就结束了,一个算一个字符。好好理解一下吧
追问
测试了一下,如果定义3个长度字符串,输入ab按回车就返回a,b,和回车 ,如果输入abc再按回车会返回a,b,c三个字符,没出现你说的只读取前两个啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Robby927
2013-07-29 · TA获得超过134个赞
知道答主
回答量:126
采纳率:100%
帮助的人:34.8万
展开全部
while(!eof)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式