【发布时间】:2018-12-26 18:34:36
【问题描述】:
我正在尝试从文件中读取值,并在某些操作后写入另一个文件。这里面临一个小问题,因为我还试图将值保存在 2D 数组中并显示它。我的文件读取和文件写入显示正确的结果,但我的程序在显示矩阵部分时抛出异常。
#include <stdio.h>
#include <ctype.h>
#ifndef NULL
#define NULL ((void *) 0)
#endif
int main(void)
{
FILE *file = NULL; //for file read
FILE *fptr = NULL; //for file write
int mat[182][274];
// code to read and display number from file
// open file for reading
file = fopen("file.txt", "r");
fptr = fopen("file1.txt", "w");
int i = 0,j=0;
fscanf (file, "%d", &i);
while (!feof (file))
{
symbol = fgetc(file);
if (symbol == '\n' || feof(file))
{
fprintf (fptr,"\n");
printf("\n");
}
else{
j=255-i;
mat[i][j]=j;
fprintf (fptr,"%d ", j);
fprintf (fptr," ");
printf ("%d ", j);
}
fscanf (file, "%d", &i);
}
fclose (file);
fclose (fptr);
//Facing issue in this part
int k;
int l;
for (k=0;k<=182;k++)
{
for(l=0;l<=274;l++)
{
printf("%d ", mat[k][l]);
}
}
return 0;
}
【问题讨论】:
-
在代码末尾的
for循环内打印时,这个mat[i][j]-->mat[k][l]。k<=182-->k < 182和l<=274-->l < 274as<=倾向于访问超出绑定的数组元素,导致未定义的行为。 -
做到了。仍然程序意外终止。我想这与 mat[i][j]=j; 有关系。线。这是问题的根源。
-
数组
int mat[182][274];的维度很奇怪,当j=255-i;时,您将索引为mat[i][j]=j;所以j永远不能是> 255,除非i < 0在这种情况下您遇到问题数组索引。 -
可能是 j=255-i 只是一个操作。假设我在文件号 1 中有一个值 40。将从 255 中减去 40,结果将存储在第二个文件中。现在我希望这个数字存储在矩阵位置(0,0)等等重复这个过程直到循环结束。
-
顺便说一句,你可以看看why !feof(file) is always problematic,不推荐。
标签: c file-handling file-read