我的C代码遇到分段错误

时间:2019-11-08 03:26:42

标签: c segmentation-fault

我正在尝试逐代更新2d数组。 为此,我需要接受两个参数:世代号和包含2d数组的初始输入txt。 但是无论我写什么,我的代码中总是存在分段错误。

我正在尝试从输入文件中读取2d数组。 该文件应类似于以下内容: 1 1 1 0 0 0 0 0 0 0 ......

int main(int argc, char *argv[]) {
  // take arguments//
  char* generation;
  char* filename;
  if (argc < 2)
    {
        printf("Error\n");
        exit(1);
    }
  else{
    generation = argv[1];
    filename = argv[2];
  }
  // read file as a 5*5 matrix//
  FILE *file;
  file = fopen (filename,"r");
  //5*5 matrix//
  int gen = atoi(generation);
  int cell[5][5];
  int i=0;
  int j=0;
  for (i=0;i<5;i++){
    for (j=0;j<5;j++){
      fscanf (file, "%d",&cell[i][j]);
    }
  }
  fclose(file);

非常感谢您!

1 个答案:

答案 0 :(得分:1)

在您的代码中,您没有使用变量generation,但我想应该将其用于存储矩阵维。如果总共是这种情况,则您正在读取3个参数,因此argc应该为3。

如果您正在读取格式如下的文件:

1 2 3 4 5
6 7 8 9 10
1 1 3 4 5
6 7 8 9 0

在控制台传递的参数为:./a.out dimension matrix。以下是一个简单但不安全的代码(它不检查用户输入的尺寸):

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {

    FILE *fp;
    char *filename;
    char *generation;

    if (argc < 3)
    {
        printf("Error\n");
        exit(1);
    }

    else {
        generation = argv[1];
        filename = argv[2];
        fp = fopen(filename, "r");

        if (fp == NULL) {
            fprintf(stderr, "Error: Cannot open file %s for reading\n", filename);
            exit(1);
        }       
   }

   int dim = atoi(generation);   

   int i, j, cell[dim][dim];

   for (i = 0; i < dim; i++) {
       for (j = 0; j < dim; j++) {
           if (fscanf(fp, "%d ", &cell[i][j]) != 1) {
               fprintf(stderr, "invalid input for cell[%d][%d]\n", i, j);
               fclose(fp);
               exit(1);
           }
       }
   }   

   fclose(fp);

   /*Print the matrix */

   for (i = 0; i < dim ; i++)
   {
       for (j = 0; j < dim ; j++)
       {
           printf("%d ", cell[i][j]);
       }
       printf("\n");
   }

   printf("\n");

   return 0;
}