1

我在将文件重定向到我的程序时遇到问题。我有一个名为 test 的 Makefile,我想将一个文本文件重定向到它作为输入。例如,我想做:

测试<文件.txt

作为我的可执行文件的输入。但是,当我尝试读取 file.txt 的内容时,我不断收到分段错误。这是我的尝试:

int main(int argc, char* argv[])
{
  FILE *a;
  int count;
  a = fopen(argv[1], "r");
  for(n = 0; ; n++)
  {
    count = fgetc(a); // <- here is where my program segfaults
    if(feof(a))
      break;
  }
  return 0;
}

可能有人知道为什么会这样吗?

4

2 回答 2

2

这是因为重定向是由 shell 处理的,而不是作为参数传递的。使用重定向时,该文件用于stdin.

您应该始终检查函数的结果,在这种情况下,您尝试fopen使用NULL文件名调用,这样它将返回NULL导致您的分段错误。

于 2012-11-28T09:00:51.173 回答
0

shell 不会将“<”和“file.txt”作为参数传递给程序,因此您argv[1]返回的是随机垃圾。

而不是从 读取a,您应该从 读取stdin,它是自动可用并打开的。

int main(int argc, char* argv[])
{
  int count;
  for(n = 0; ; n++)
  {
    count = fgetc(stdin); 
    if(feof(stdin))
      break;
  }
  return 0;
}
于 2012-11-28T09:02:15.883 回答