【发布时间】:2014-11-29 03:50:09
【问题描述】:
我有一个程序可以从文件中读取二维数组,并使其成为锯齿状数组(其中每一行的大小都非常适合所有非零元素)。然后将数组打印出来。
但我有几个问题我想不通。
具体
26: 我收到一个警告(赋值使指针变成整数而没有强制转换
44: 错误:下标值既不是数组也不是指针
我能做些什么来解决它?
int main() {
FILE *inputFile1 = fopen("denseMatrix1.txt", "r");
char inputBuffer[SIZE];
int dim1, dim2, input, i, j;
int *mtrx1;
fgets(inputBuffer, SIZE, inputFile1);
sscanf(inputBuffer, "%d%d", &dim1, &dim2);
mtrx1 = malloc(sizeof(int *) * dim1);
for (i=0; i<dim1; i++) {
int cols=0;
int *row = malloc(sizeof(int) * cols);
fgets(inputBuffer, SIZE, inputFile1);
for (j=0; j<dim2; j++) {
sscanf(inputBuffer, "%d", input);
printf("i=%d j=%d input=%d\n", i, j, input); // ADDED LINE (NOT PRINTING)
if (input) {
cols++;
row = realloc(row, sizeof(int) * cols);
row[cols-1] = input;
}
}
mtrx1[i] = row;
cols=0;
}
int mtrx3[DIM1][DIM2] = {0};
// Prints first 2 matrices
printf("First matrix: \n");
printMatrix(mtrx1, dim1);/*
return 0;
// Prints a 2d array matrix
void printMatrix(int *mtrx, int dim1) {
int i, j;
for (i=0; i<dim1; i++) {
for (j=0; j<(sizeof(mtrx[i]) / sizeof(int)); j++) {
printf("%d ", mtrx[i][j]);
}
printf("\n");
}
printf("\n\n");
denseMatrix1.txt 文件内容:
7 8
0 0 0 5 1 0 0 5
0 0 0 0 0 0 0 0
0 0 0 0 1 2 0 0
1 0 0 0 0 0 0 0
3 0 0 5 0 0 3 0
1 0 0 0 0 3 0 0
0 0 0 0 0 0 0 1
【问题讨论】:
-
此代码无法编译,并且语法中有几个错误,例如此行末尾的 '*': printMatrix(mtrx1, dim1);/* 并且即使该错误不存在,缺少 main() 函数末尾的关闭“}”,printMatrix() 函数的其余部分也是如此
-
需要检查来自 I/O 输入函数(scanf、fgets)的返回值,以确保实际发生所需的操作。由于空格仍在输入中(例如换行符),scanf() 的格式字符串将失败。要解决这个问题,格式字符串中需要有一个前导“”
-
如果调用 realloc() 失败,那么下一行代码将导致 seg 错误事件。 IE。使用前测试返回值
-
变量“输入”未定义。你有没有尝试编译这段代码?