使用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
相关产品推荐
相关产品推荐

