从stdin读取输入参数时出现意外行为

时间:2018-04-12 14:18:00

标签: c stdin

我正在测试一个程序“myprog.c”,如果它运行任何输入参数,它会崩溃:

#include <stdlib.h>
int main(int argc, char * arg[]){
  if (argc > 1 ){
    abort();

  }
}

正如预期的那样,“。/ mrogrog.out abc”崩溃了。但后来我尝试从文件中获取输入:“。/ mrogrog.out&lt; inputs.txt”,其中inputs.txt有两个单词,程序不会崩溃。为什么不?

2 个答案:

答案 0 :(得分:2)

那是因为shell没有传递< inputs.txt作为参数。相反,shell会使inputs.txt的内容从stdin中读取。

答案 1 :(得分:1)

因为argc等于1,您可以使用以下代码对其进行验证:

int     main(int argc, char * arg[])
{
    printf("argc = %i\n", argc);
    if (argc > 1 ) {
        abort();
    }
}

输出:

  

argc = 1

它的出现是因为你不能像它一样传递参数,如果你用&lt;你的程序会像stdin(filedescriptor numero 0)

那样解释它

如果你想传递多于1的参数,那就喜欢它了:

  

./ a.out abc def ghi

如果你想得到&#34;论证&#34;通过文件,使用getline