读取C中"<"后面的命令行参数

6 c command-line-arguments

首先让我说这与家庭作业有关.但是,这是一项非常小且相对微不足道的任务.

C程序通过命令行参数接收输入,但它需要采用以下形式:

$ ./program < input
Run Code Online (Sandbox Code Playgroud)

怎么,我会把这个输入作为一个字符串接收?每次我尝试从argv打印出第3个参数时,都会收到以下消息:

输入:没有这样的文件或目录.

Dou*_*der 21

<是一个shell重定向 - 它在程序之外处理.您将看到的是发送到标准输入流的文件名"input"的内容.这是程序运行的常用方法,尽管它们通常也会处理文件名,例如sed.

如果我不得不猜我会认为:

input: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

是来自shell,因为它无法打开指定的文件:"输入".

另一方面,如果你真的想要< input你的程序的as参数,你可以转义或引用它们,以便shell不会解释它们.(作为读者的练习逃离:-)).

  • 伊斯特伍德先生,你在那里拍的很棒. (2认同)

Pie*_*don 10

./program < input语法是一个特殊的shell语法说"重定向指定的文件中所有input的程序的标准条目".

要读取输入,您的程序只需使用标准输入读取功能,行fgetsscanf.


Chr*_*utz 5

在*nix系统,因此不会成为的第三个要素argv.如果你在几乎任何类Unix的shell上执行该命令,它将类似于这样做:

cat input | ./program
Run Code Online (Sandbox Code Playgroud)

所以你./program只有一个元素argv,但它stdin是文件input,所以要阅读你刚读取的文件stdin.请注意,这是设计程序的完美有效方法.如果没有给出文件,许多Unix程序都会从​​标准输入读取,这样你就可以管理来自其他程序的输入(或者在这种情况下,来自文件).