【发布时间】:2020-10-17 11:26:40
【问题描述】:
我必须从文件中解析一个矩阵,其中第一行字符是行数,列数是矩阵值。
文件包含:
3 3
R R B
B G G
G B R
我写了下面的代码,但是它崩溃了。
char** readMatrix(FILE *file) {
char *array;
int el = 0;
while (fscanf_s(file, "%s", array) != EOF) {
array[el] = array;
el++;
}
const int n = array[0] - '0', m = array[1] - '0';
char** matrix = malloc(n * sizeof(char*));
for (int i = 0; i < n; i++)
{
matrix[i] = malloc(m * sizeof(char));
}
int k = 2;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
matrix[i][j] = array[k];
++k;
}
}
return matrix;
}
不同文件的矩阵大小不同。如何在不知道大小的情况下声明一个 char 数组?
【问题讨论】:
-
根据需要使用
realloc()发光阵列。 -
需要动态分配,或者使用变长数组。但是目前你只是在使用
array而不为它设置任何值,这是未定义的行为。将编译器的警告设置为最大。 -
array[el] = array这是在做什么?array不仅是一个未初始化的指针,因此很可能是导致崩溃的原因,而且存储对数组本身的引用也很奇怪。改为使用%d解析整数。 -
array[el] = array -> 我正在尝试将输入值分配给数组元素。