文件重定向到程序

时间:2012-11-28 08:55:10

标签: c++ file-io io-redirection

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

测试< file.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;
}

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

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

您应该始终检查功能结果,在这种情况下,您尝试使用fopen作为文件名调用NULL,以便它返回NULL,从而导致您的细分错误。

答案 1 :(得分:0)

shell没有传递“&lt;”和“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; } 会自动提供并打开。

{{1}}