读取满整数的文件时C中的分段错误

读取满整数的文件时C中的分段错误,c,segmentation-fault,readfile,C,Segmentation Fault,Readfile,我只是试图打开一个文件,读取整数并打印数组。但是,出现了分段错误。我不确定我做错了什么 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",&

我只是试图打开一个文件,读取整数并打印数组。但是,出现了分段错误。我不确定我做错了什么

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]);
  }

}

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

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

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]);
   }

}

显示命令行和参数以及文件内容。和读取并检查fopen和fscanf的返回值。该大小首先从文件中读取,但当它太大而无法在堆栈中保留时,则会成为seg错误的原因之一。@user7729282如果您目前假定的大小较大,请使用malloc而不是VLA。另外,fscanf的返回值通常不是它扫描的值之一,而是它成功扫描的值的数量。因此,将该返回值赋给[i]不太可能是您真正想要做的事情。首先,您是否给出了命令参数?如果未授予任何命令行参数访问argv[1]的权限,则是seg故障的原因之一。您还应验证fscsnf返回值。例如,当您在此处使用无效文件测试时,大小可能仍然未初始化。@hyde感谢您的评论。