我在将文件重定向到我的程序时遇到问题。我有一个名为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;
}
有谁知道为什么会这样?
答案 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}}