C语言printf打印额外字符:刽子手游戏单词显示异常问题
刽子手游戏字符串打印异常问题
我是Stack Overflow和C语言新手,开发刽子手游戏时遇到了问题:调用draw_board()打印游戏面板时,目标单词本该显示为_ _ _ _(比如单词free),但额外输出了jdgx这类乱码字符。单独打印该字符串时一切正常,放到draw_board()里就异常。
生成字符串的代码
const int Size = strlen(Word); printf("Your Word is: %s. With a len of %d.", Word, Size); char *Word_Letters = malloc(Size); for (int i = 0; i < Size; i++) { *(Word_Letters + i) = '_'; } *(Word_Letters+Size) = '\0';
打印面板的代码
printf(" _____\n | o\n | %c|%c\n | %c %c\n_|_\n\n%s\n\nEnter Guess: \0", LA, RA, LL, RL, LetterString);
实际输出
Your Word is: bead. With a len of 4. _ _ _ _ AvSV Enter Guess:
排查与解决过程
- 第一次尝试:将第85行的
malloc(Size)改为malloc(Size+1),问题未解决。 - 最终解决:经提示发现问题出在打印的字符串未以空字符终止,修改如下:
- 将第23行的数组定义:
改为:char LetterString[LetterSize*2];char LetterString[LetterSize*2+1]; - 在第35行添加空字符终止代码:
LetterString[LetterSize*2] = '\0';
- 将第23行的数组定义:
内容的提问来源于stack exchange,提问作者Carson Coder
相关产品推荐
相关产品推荐

