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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:43