c - 我的 c 代码中遇到段错误

标签 c segmentation-fault

我正在尝试逐代更新二维数组。 为了做到这一点,我需要两个参数:生成号和包含二维数组的初始输入 txt。 但无论我写什么,我的代码中总是存在段错误。

我正在尝试从输入文件中读取二维数组。 该文件应类似于以下内容: 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);

非常感谢!!!

最佳答案

在您的代码中,您没有使用变量生成,但我认为它应该用于存储矩阵维度。如果是这种情况,您总共会读取 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维度矩阵。一个简单但不安全的代码(它不检查用户输入的尺寸)如下:

#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;
}

关于c - 我的 c 代码中遇到段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58759936/

相关文章:

c - 了解结构中的指针行为

将img文件的内容复制到另一个img文件

c - 结构内部消失后的段错误(变量已损坏)

c - 在 C 中打印 double 而不是整数

c++ - 为什么你不能对 C 中的指针进行按位运算,有没有办法解决这个问题?

c - 包含包含 header 时未找到枚举声明

c++ - 遍历字符串 vector ,从控制台获取输入,给出段错误

c++ - sublime text C++ 编译导致段错误

c++ - `0x2` 是 C++ 中的空指针吗?

c - 为什么 char * malloc 给我一个 scanf 的段错误?