代码之家  ›  专栏  ›  技术社区  ›  user7729282

读取充满int的文件时C中的分段错误[关闭]

  •  -4
  • user7729282  · 技术社区  · 7 年前

    我只是想打开一个文件,读取int并打印数组。然而,出现了分段错误。我不确定我做错了什么。

    int main (int argc, char *argv[])
    {
       int size;
       int i;
       FILE* p = fopen(argv[1], "r");
       fscanf(p, "%d", &size);
       int a[size];
    
       for(i=0; i<size; i++)
       {
          a[i] = fscanf(p,"%d",&a[i]);
    
       }
    
       for(i=0;i<size;i++)
      {
          printf("%d", a[i]);
      }
    
    }
    

    任何帮助都将不胜感激。谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   Aref    7 年前

    代码看起来不错,但是您可以添加一些验证以确保输入正确。

    int main (int argc, char *argv[])
    {
       int size=0;
       int i=0;
       int ret=0;
    
       // make sure arcv[1] exists:
       if (argc < 2)
       {
           printf("not enough arguments provided");
           return -1;
       }
    
       FILE* p = fopen(argv[1], "r");
    
       // make sure file exists
       if (p == 0) // or p == NULL
       {
           printf("file does not exists");
           return -1;
       }
    
       ret = fscanf(p, "%d", &size);
       // make sure the size is a valid number
       if (ret == EOF || ret <= 0 || size <= 0)
       {
           printf("invalid file");
           return -1;
       }
       int a[size];
    
       for(i=0; i<size; i++)
       {
          fscanf(p,"%d",a+i);
       }
    
       for(i=0;i<size;i++)
       {
          printf("%d", a[i]);
       }
    
    }