如何在C语言中创建存储数字字符串的二维数组以保留前导零
实现修正思路
你选择用字符串存储的方向是完全正确的,这样可以完整保留00、08这类值的前导零,也方便后续追加字符。原来的整体思路没问题,但有几个核心错误需要修正:
- 数组类型错误:你定义的
char matrix[row][col]是二维字符数组,每个位置只能存单个字符,无法存储完整的字符串。要存储带前导零的字符串、还支持后续追加字符,需要定义三维字符数组,每个矩阵元素对应一个独立的字符串缓冲区。 - 变量未定义:代码中使用的
name、bingoCard均未声明,会直接编译报错。 - 字符串赋值错误:C语言中字符串不能直接用
=赋值,需要调用strcpy函数完成拷贝。
正确实现代码
你可以按照如下代码修改,每个字符串预留4字节空间(足够存2位数字+1个追加字符+1个字符串结束符\0):
#include <stdio.h> #include <string.h> // 矩阵数组作为参数传入,避免栈内存释放后无法访问的问题 void createMatrix(FILE *fp, char matrix[5][5][4]) { int row = 5; int col = 5; int i, j; char num[4]; // 临时存储读取到的2位数字字符串 rewind(fp); for (i = 0; i < row; i++) { for(j = 0; j < col; j++) { // 读取空格分隔的字符串,每次读2位数字 fscanf(fp, "%s", num); // 拷贝到矩阵对应位置 strcpy(matrix[i][j], num); } } }
后续修改与打印说明
- 追加字符操作:比如要给第0行第0列的元素追加
X,直接写matrix[0][0][2] = 'X';即可,原来的2位数字存在下标0和1的位置,下标2默认是结束符,刚好可以放追加的字符。 - 打印对齐:要达到你给出的输出格式,打印时用
%-3s格式符控制每个元素占3位宽度左对齐,就能自动适配2字符/3字符的元素,实现整齐排版:
void printMatrix(char matrix[5][5][4]) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { printf("%-3s", matrix[i][j]); } printf("\n"); } }
内容的提问来源于stack exchange,提问作者wal238
相关产品推荐
相关产品推荐

