C语言打印星号字符时终端输出乱码该如何排查解决?
问题修复方案
你的问题核心是混淆了C语言中单字符和字符串的写法规则:
- 单引号
' '包裹的内容是char类型的单个字符,对应单个ASCII值 - 双引号
" "包裹的内容是字符串字面量,本质是指向只读字符数组的指针,末尾默认带\0结束符
你给char类型的asterisk赋值字符串字面量时,实际写入变量的是字符串内存地址的低位字节,而非星号的ASCII值,所以输出才会出现乱码。
修复方案1:保持用%c打印单字符
修改三处代码即可:
- 变量初始化改为单引号包裹的空字符:
char asterisk = '\0';
- 三元运算改为单引号包裹的单字符,不需要手动加结束符:
asterisk = (cube % 3 == 0) ? '*' : '\0';
- 原有printf语句无需改动,空字符
\0打印时不会显示任何内容,完全符合需求。
修复方案2:改用字符串打印
如果后续需要调整后缀内容,更灵活的写法是改用字符串类型:
- 变量声明修改为字符串指针类型:
const char *asterisk = "";
- 三元运算保持双引号字符串即可:
asterisk = (cube % 3 == 0) ? "*" : "";
- printf的格式符改为
%s匹配字符串类型:
printf("%d%s\n", cube, asterisk);
内容的提问来源于stack exchange,提问作者QuantumBlink
相关产品推荐
相关产品推荐

