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

使用FOR循环修改二维字符数组时出现异常行为求助

问题分析与解决方案

你的代码问题出在字符串结束符缺失:C语言中使用printf("%s")打印字符串时,要求目标字符数组必须以'\0'(空字符)结尾。你定义的converted[4][4]每行只有4个元素,全部被填充为'X'后,没有多余位置存储'\0',导致printf会越界读取内存中的随机值,直到碰到第一个'\0',这就是输出末尾出现乱码的原因。

解决方法一:为每行预留结束符位置

将数组每行的大小从4改为5,预留一个位置存储'\0',填充完'X'后手动添加结束符:

#include <stdio.h>

int main() {
    char converted[4][5]; // 每行多1个位置存字符串结束符
    for(int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            converted[i][j] = 'X';
        }
        converted[i][4] = '\0'; // 添加字符串结束符
    }

    for(int i = 0; i < 4; i++) {
        printf("%s\n", converted[i]);
    }
}

解决方法二:逐个打印字符(无需修改数组大小)

放弃使用%s格式符,直接循环打印每行的每个字符,完成后换行:

#include <stdio.h>

int main() {
    char converted[4][4];
    for(int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            converted[i][j] = 'X';
        }
    }

    for(int i = 0; i < 4; i++) {
        for(int j=0; j<4; j++) {
            printf("%c", converted[i][j]);
        }
        printf("\n");
    }
}

两种方法都能得到符合预期的输出:

XXXX
XXXX
XXXX
XXXX

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:15