2016-10-22 18 views
2

我在C.主要的焦炭*的argv []不包括参数如果标准输入是文件

./main 7 4 

该命令在终端的原因一点新手该ARGV [1] = 7,的argv [2 ] = 4.

./main <input.in 

当我在终端中使用stdin重定向时,它只显示argc = 1(./main)。

有没有办法如何解决这个问题,或者我必须尝试不同的方式?

+2

'stdin'与传递给程序的*命令行参数*不同。 – EOF

+1

“*有什么办法可以解决这个问题*”哪个问题?你描述了一个明确定义的行为,但没有告诉我们问题是什么。 – alk

+0

对于第二个示例,使用来自stdin(标准输入)的* reading *来获取您的数字。 – alk

回答

2

您的shell将<file.txt解释为“将file.txt的内容发送到此进程的标准输入”,因此您的程序将永远不会看到<file.txt部分。

有没有办法解决这个问题,因为这是POSIX(可能还有其他)shell的故意特征。

0

我们既然在Ubuntu上使用终端,我会假定你使用的是bash。您遇到的问题不是真正的问题,但bash是如何启动您的程序的。

终端挂在prase ./program [args, ...] < redirected上,bash在内部调用exec函数来启动你的程序并为你的程序设置环境。它使用[]之间的任何参数设置您的程序,但之后包括“<”重定向符号。它不会作为参数呈现给您的程序,但会将其挂接到标准输入。

所以,如果你想用它做的东西,你可以这样做:

#include <stdio.h> 
int mychar = getchar(stdin). 

因为FILE* stdin;已经打开了。 stdin文件会接受来自键盘的输入,但现在将从文件中读取。你当然不限于getchar,你可以从stdio.h中获取许多带有FILE *的c函数并使用它。