有关c语言中字符串结束符的问题
如果定义了一个只有3个长度的字符串,输入三个字符,那么系统会在这个字符串后面加上'\0'吗?那这个字符串的长度不就不止3个了,还有在按回车键的时候是按3个回车就结束还是2...
如果定义了一个只有3个长度的字符串,输入三个字符,那么系统会在这个字符串后面加上'\0'吗?那这个字符串的长度不就不止3个了,还有在按回车键的时候是按3个回车就结束还是2个,因为回车符是\n,所以我有点糊了,求解答
展开
5个回答
展开全部
定义一个字符数组a[10]
读取字符串可以用gets() 函数
如果你输入 abc 打回车
那么就会存储 'a''b''c''\0' 回车符\n会自动转换成\0
那么字符串的长度是4
有效长度是3
读取字符串可以用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是字符串结尾的标志
展开全部
一般情况下字符串是存放在数组中的
数组的长度如果小于字符串长度+1则会出错
如果像这样
char buf[] = "12345"
或者
char buf[10] = “12345”
则会自动在5后补上结束符
有问题继续跟问
数组的长度如果小于字符串长度+1则会出错
如果像这样
char buf[] = "12345"
或者
char buf[10] = “12345”
则会自动在5后补上结束符
有问题继续跟问
追问
但是如果我只定义3个长度,输入abc加回车,那储存的是abc然后系统补加一个\0变成4个长度,还是储存ab和\0,保持3个长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个问题,系统不会自动加上‘\0’。反而会提示错误,内存访问越界。你定义三个长度,只能存两个字符。第二个问题我没看懂你说的是什么意思。
追问
我用xcode写的代码,没有出现你说的提示错误,如果定义3个长度字符串,输入ab按回车就返回a,b,和回车 ,如果输入abc再按回车会返回a,b,c三个字符,没出现你说的只读取前两个啊?
追答
我测试了下,系统确实会自动加上‘\0’,但是这个‘\0’不包括在你定义的这个数组里面,只是在内存上来说,你数组第三个内存地址后面的一个内存地址里面被系统存进了一个‘\0’.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入三个字符,只会读取前两个,后面加“\0”。按回车键字符串不读取,换行用“\n”的话,两个就结束了,一个算一个字符。好好理解一下吧
追问
测试了一下,如果定义3个长度字符串,输入ab按回车就返回a,b,和回车 ,如果输入abc再按回车会返回a,b,c三个字符,没出现你说的只读取前两个啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(!eof)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询