You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),问题未解决。
  • 最终解决:经提示发现问题出在打印的字符串未以空字符终止,修改如下:
    1. 将第23行的数组定义:
      char LetterString[LetterSize*2];
      
      改为:
      char LetterString[LetterSize*2+1];
      
    2. 在第35行添加空字符终止代码:
      LetterString[LetterSize*2] = '\0';
      
    修改后问题得以解决。

内容的提问来源于stack exchange,提问作者Carson Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:57:27