我在C.主要的焦炭*的argv []不包括参数如果标准输入是文件
./main 7 4
该命令在终端的原因一点新手该ARGV [1] = 7,的argv [2 ] = 4.
./main <input.in
当我在终端中使用stdin重定向时,它只显示argc = 1(./main)。
有没有办法如何解决这个问题,或者我必须尝试不同的方式?
我在C.主要的焦炭*的argv []不包括参数如果标准输入是文件
./main 7 4
该命令在终端的原因一点新手该ARGV [1] = 7,的argv [2 ] = 4.
./main <input.in
当我在终端中使用stdin重定向时,它只显示argc = 1(./main)。
有没有办法如何解决这个问题,或者我必须尝试不同的方式?
您的shell将<file.txt
解释为“将file.txt的内容发送到此进程的标准输入”,因此您的程序将永远不会看到<file.txt
部分。
有没有办法解决这个问题,因为这是POSIX(可能还有其他)shell的故意特征。
我们既然在Ubuntu上使用终端,我会假定你使用的是bash。您遇到的问题不是真正的问题,但bash是如何启动您的程序的。
终端挂在prase ./program [args, ...] < redirected
上,bash在内部调用exec
函数来启动你的程序并为你的程序设置环境。它使用[]之间的任何参数设置您的程序,但之后包括“<”重定向符号。它不会作为参数呈现给您的程序,但会将其挂接到标准输入。
所以,如果你想用它做的东西,你可以这样做:
#include <stdio.h>
int mychar = getchar(stdin).
因为FILE* stdin
;已经打开了。 stdin文件会接受来自键盘的输入,但现在将从文件中读取。你当然不限于getchar,你可以从stdio.h中获取许多带有FILE *的c函数并使用它。
'stdin'与传递给程序的*命令行参数*不同。 – EOF
“*有什么办法可以解决这个问题*”哪个问题?你描述了一个明确定义的行为,但没有告诉我们问题是什么。 – alk
对于第二个示例,使用来自stdin(标准输入)的* reading *来获取您的数字。 – alk