C语言字符串末尾随机字符问题求助:输入8出现/输入6正常
C语言字符串末尾出现随机字符的原因及解决办法
核心原因就是你怀疑的空字符('\0')问题,C语言里的字符串必须以'\0'作为结束标记,程序输出字符串时会从起始地址一直读取,直到遇到'\0'才停止。
结合你的场景分析:
- 当输入6个字符时,你的数组有足够空间存放输入内容+
'\0',程序能正常识别字符串结束位置,所以输出无乱码。 - 当输入8个字符时,数组的所有空间被输入的字符占满,没有多余位置存放
'\0'。输出时程序会越界读取数组后面的内存内容,直到随机碰到一个'\0',这中间读到的就是你看到的随机字符。
给你几个直接的解决办法:
- 给字符数组多分配1个字节的空间,比如原本定义
char str[8];就改成char str[9];,留足存放'\0'的位置。 - 限制输入的字符长度,用
scanf("%8s", str)代替普通的scanf("%s", str),这样最多读取7个字符,自动给'\0'留位置。 - 手动添加结束符:如果数组长度足够(至少比最大输入长度多1),输入完成后执行
str[strlen(str)] = '\0';,不过更稳妥的是直接按前两种方法处理。
内容的提问来源于stack exchange,提问作者M. Cousins The III
相关产品推荐
相关产品推荐

