如何在C语言中创建由'-'组成的二维数组
问题分析与修复方案
嘿,我来帮你捋捋这段代码里的问题,以及怎么修改才能实现你想要的由'-'组成的二维数组~
原代码的几个核心问题:
- 数组索引越界:你的数组是
char table[10][10],数组索引从0开始计数,第一维的合法索引范围是0到9,你写的table[10][i]直接访问了超出数组范围的内存,这会导致未定义行为(程序崩溃、输出乱码都有可能)。 - 误用字符串操作函数:
strcpy是用来复制完整字符串的,但你这里只是想给单个字符赋值'-',完全没必要用这个函数,直接赋值就行。 - 内层循环变量未利用:你内层循环遍历了
j,但代码里根本没用到这个变量,说明你没正确定位到二维数组的每个元素,应该操作table[i][j]才对。
修复后的代码
如果你只是想创建全是'-'的二维字符数组,之后逐个字符输出,这样写就可以:
#include <stdio.h> int main() { char table[10][10]; // 填充每个元素为'-' for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { table[i][j] = '-'; } } // 打印整个二维数组 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { printf("%c", table[i][j]); } printf("\n"); // 每行结束换行 } return 0; }
如果之后想把每行当作字符串来打印(用printf("%s", ...)),那需要给每行末尾加上字符串结束符'\0',这时候要把数组定义成char table[10][11];(多留一个位置存结束符),修改后的代码如下:
#include <stdio.h> int main() { char table[10][11]; // 每行多一个位置存字符串结束符 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { table[i][j] = '-'; } table[i][10] = '\0'; // 给每行加上字符串结束符 } // 按字符串打印每行 for (int i = 0; i < 10; i++) { printf("%s\n", table[i]); } return 0; }
这样运行后就能得到你想要的10×10全是'-'的二维数组啦~
内容的提问来源于stack exchange,提问作者Steven Oh
相关产品推荐
相关产品推荐

