C语言字符矩阵填充后打印乱码问题求助(Windows环境)
解决C语言char矩阵打印乱码的问题
你遇到的乱码问题,核心原因是局部char数组在声明后没有被初始化——栈上的局部变量默认不会自动清零,里面会充满内存里的随机垃圾值,直接打印自然就是乱码了。另外你的create函数代码没写完,应该是负责填充矩阵的逻辑还没补全对吧?
问题根源拆解
你定义的tab[10][10]是局部数组,在栈内存中分配,初始状态是未定义的随机字节。当你直接调用paint打印这些未赋值的元素时,printf会把这些随机字节当作ASCII字符输出,就出现了乱码。
修正方案
我们需要先初始化矩阵的所有元素,要么填充默认字符(比如空格),要么根据需求设置特定内容。这里给你补全并修正代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> void paint(char tab[10][10], int lignes, int colonnes) { system("cls"); for (int i = 0; i < lignes; i++) { for (int j = 0; j < colonnes; j++) { printf("%c", tab[i][j]); } printf("\n"); } } // 补全create函数:先初始化矩阵为默认字符,再添加自定义填充逻辑 void create(char tab[10][10], int lignes, int colonnes) { // 第一步:把所有元素初始化为空格,彻底避免乱码 for (int i = 0; i < lignes; i++) { for (int j = 0; j < colonnes; j++) { tab[i][j] = ' '; } } // 第二步:添加自定义填充逻辑(示例:画一个边框) for (int i = 0; i < lignes; i++) { tab[i][0] = '#'; // 左边框 tab[i][colonnes-1] = '#'; // 右边框 } for (int j = 0; j < colonnes; j++) { tab[0][j] = '#'; // 上边框 tab[lignes-1][j] = '#'; // 下边框 } } int main() { char matrix[10][10]; create(matrix, 10, 10); paint(matrix, 10, 10); return 0; }
关键说明
- 初始化优先:在使用数组前,一定要先给每个元素赋值,哪怕是填充空格这样的默认值,避免读取未定义的内存。
- Windows环境补充:如果后续需要打印中文等非ASCII字符,要注意控制台的编码设置(比如切换为UTF-8),但你当前的乱码问题核心还是未初始化,先解决这个基础问题即可。
内容的提问来源于stack exchange,提问作者raiskader
相关产品推荐
相关产品推荐

