c语言 gets()会不会把原数组的值全部覆盖掉?比如原数组中有1234四个字符,通过gets输入abc,最终

为什么存储的是abc而不是abc4
2024-11-07 18:40:44
推荐回答(3个)
回答(1):

gets得到的是字符串,而字符串是以'\0'结尾的啦。
如:
char a[10];
gets(a);//你输入1234,则a里存储的内容是"1234\0",一共占了5个位置,不要忘了'\0'
gets(a);//这里你输入abc,则a存储的内容是"abc\0\0",看到没有两个\0了,而输出字符串,是遇到\0
//就结束的啦。如果你输入ab,则a存储的内容是"ab\04\0",你可以试着输出a[3],那么它会输出4,
//不信?你可以试一试啦

回答(2):

你的原数组是这样的{'1', '2', '3', '4', '\0'}
gets输入abc后是这样的{'a', 'b', 'c', '\0', '\0'}
gets函数会自动在读取的字符串后加一个空字符。所以‘4’被这个空字符覆盖了

回答(3):

gets()函数是输入一个字符串。而字符串默认是以'\0'结尾。当你gets输入为abc的时候,存入数组的内容应该是abc'\0' 共4个字符,覆盖了原来的4个数字。
如果你输入的事ab 则存在原数组的内容则是ab_4
楼主求采纳呦