c语言关于字符串最后加不加'\0'的添加问题?

用scanf gets 和getchar输入字符串时,需要自己手动加'\0'吗,如果不需要那什么情况下需要手动加'\0'呢?

    gets函数是专门用来输入字符串的,当最后打入'\n'时前面的输入才起作用,而且gets会把最后的'\n'接收了并转换成'\0'存入接收字符串的空间。所以用gets不用加入'\0'。

    scanf在用%s控制时也接收字符串,它也能在输入'\n'后把前面输入的字符存入接收空间并在后面自动加一个'\0',所以也不用人工再添加'\0'。不过scanf这时不会接收'\n',会把'\n'遗留在输入缓冲区里,在后面接着要接收字符的话会引起出错,需要当心。

    getchar不是接收字符串的,一次只接收一个字符,当要把这些字符组织成字符串时,要人工在最后加一个'\0'。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-01-19
如果不是使用scanf函数的%s格式或gets函数输入字符串(例如getchar),请一定要在输入的每个字符串后加‘\0',否则printf和puts输出字符串会因无法识别字符串而输出一堆乱码,如:

#include<stdio.h>
int main(){
char str[15];
for(int i=0;i<3;i++){
str[i]=getchar();
}
puts(str);
return 0;
}

输入字符串:
T_T

输出(T_T后面全是乱码):
T_T0口@本回答被提问者采纳
相似回答