C 从文件中读取值并将其存储在2D矩阵中

C 从文件中读取值并将其存储在2D矩阵中,c,file-handling,file-read,C,File Handling,File Read,我试图从一个文件中读取值,并在某些操作后写入另一个文件。这里面临一个小问题,因为我还试图在2D数组中保存值并显示它。我的文件读取和文件写入显示正确的结果,但我的程序在显示矩阵部分时抛出异常 #include <stdio.h> #include <ctype.h> #ifndef NULL #define NULL ((void *) 0) #endif int main(void) { FILE *file = NULL; //for file rea

我试图从一个文件中读取值,并在某些操作后写入另一个文件。这里面临一个小问题,因为我还试图在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;
}
C中的数组开始于0,结束于数组大小-1

当您访问阵列外部的内存时,很可能遇到分段错误

要解决此问题,请更改以下行:

 for (k=0;k<182;k++)
 {

  for(l=0;l<274;l++)
  {

      printf("%d ", mat[k][l]);
  }
 }
注意,我分别将关系运算符从=更改为

除此之外,您可能还需要完全初始化阵列。如果数组未初始化,则可能会打印奇数值@风向标

但是,为了最好地确定是否是这种情况,我们需要file.txt和file1.txt。

C中的数组从0开始,以数组大小-1结束

当您访问阵列外部的内存时,很可能遇到分段错误

要解决此问题,请更改以下行:

 for (k=0;k<182;k++)
 {

  for(l=0;l<274;l++)
  {

      printf("%d ", mat[k][l]);
  }
 }
注意,我分别将关系运算符从=更改为

除此之外,您可能还需要完全初始化阵列。如果数组未初始化,则可能会打印奇数值@风向标


但是,为了最好地确定是否是这种情况,我们需要file.txt和file1.txt。

在代码末尾打印内部for循环时,这个mat[i][j]->mat[k][l]。同样,kk<182和l<274。程序仍然意外终止。我猜这与mat[I][j]=j有关;线这就是问题的根源。数组int mat[182][274]的维数;奇怪的是,你的索引是mat[i][j]=j;当j=255-i时;所以j永远不能大于255,除非i<0,在这种情况下,数组索引有问题。可能j=255-i只是一个操作。假设我在文件编号1中有一个值40。将从255中减去40,结果将存储在第二个文件中。现在我希望这个数字存储在矩阵位置0,0,以此类推,重复这个过程直到循环结束。作为旁白,您可以看一下,但不推荐。当在代码末尾为循环内部打印时,这个mat[i][j]->mat[k][l]。同样,kk<182和l<274。程序仍然意外终止。我猜这与mat[I][j]=j有关;线这就是问题的根源。数组int mat[182][274]的维数;奇怪的是,你的索引是mat[i][j]=j;当j=255-i时;所以j永远不能大于255,除非i<0,在这种情况下,数组索引有问题。可能j=255-i只是一个操作。假设我在文件编号1中有一个值40。将从255中减去40,结果将存储在第二个文件中。现在,我希望将该数字存储在矩阵位置0,0,以此类推,重复此过程直到循环结束。作为旁白,您可能会看一看,但不推荐。还值得注意的是,作为一个自动数组,mat[]未初始化,因此,对于未明确设置的数组元素,可能会打印一些奇怪的值。@Weather Vane谢谢。更新。还值得注意的是,作为一个自动数组,mat[][]未初始化,因此可能会为未明确设置的数组元素打印一些奇怪的值。@Weather Vane谢谢。更新。