我正在尝试从文件中读取值,并在进行一些操作后写入另一个文件。这里面临一个小问题,因为我也试图将值保存在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;
}
答案 0 :(得分:4)
C中的数组始于0
,结束于(array_size - 1)
。
当您访问数组外部的内存时,很可能遇到分段错误。
要解决此问题,请更改以下行:
for (k=0;k<182;k++)
{
for(l=0;l<274;l++)
{
printf("%d ", mat[k][l]);
}
}
请注意,我将关系运算符分别从<=
和>=
更改为<
和>
。
此外,您可能需要完全初始化数组。如果未初始化数组,则可能会打印奇数值。 (@风向标)。
但是,为了最好地确定是否确实如此,我们需要file.txt
和file1.txt
。