我是C的小新手。
./main 7 4
终端中的此命令导致argv [1] = 7,argv [2] = 4。
./main <input.in
当我在终端中使用stdin的重定向时,它只显示argc = 1(./ main)。
有什么方法可以解决这个问题,还是我必须尝试不同的方式?
答案 0 :(得分:2)
你shell将<file.txt
解释为“将file.txt的内容发送到此进程'stdin”,因此你的程序永远不会看到<file.txt
部分。
没有办法解决这个问题,因为这是POSIX(可能还有其他)shell的故意特征。
答案 1 :(得分:0)
我们因为你在Ubuntu并使用终端,我会假设你正在使用bash。您遇到的问题不是真正的问题,而是bash如何启动您的程序。
终端挂钩p ./program [args, ...] < redirected
,bash调用exec
函数内部启动程序,并为您的程序设置环境。它使用[]之间的任何args设置你的程序,但之后包括“&lt;”重定向符号。它不作为参数呈现给您的程序,但它将它与标准输入挂钩。
所以,如果你想用它做点什么,你可以这样做:
#include <stdio.h>
int mychar = getchar(stdin).
因为FILE* stdin
;已经打开了。否则stdin文件将接受来自键盘的输入,但现在将从文件中读取。您不仅限于getchar,您可以从stdio.h中获取许多带有FILE *并使用它的c函数。