c - 读取充满整数的文件时,C 中的段错误

标签 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",&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]);
   }

}

关于c - 读取充满整数的文件时,C 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46065993/

相关文章:

c - 十六进制数的异常输出

c++ - 仅在第二次访问链表中的结构后出现段错误

c - 段错误或可疑的指针到指针转换(区域太小)

c - C 中棘手的段错误

c - c中蓝牙接收文件

iOS 应用程序由于无限 while 循环而无法渲染

java - 读取文件并创建数组

c - 从文件读取并使用 strtok while 循环仅打印每行的第一个单词

c++ - 如何正确使用 ifstream 从输入文件中读取数据?

c - 分配一个连续的内存块