我正在尝试重定向程序的输入。 这是我在终端输入的命令:
./hello < name
“name”是包含单个字符串的文件。 hello是一个编译的C程序,由以下代码组成:
int main(int argc, char *argv[])
{
char message[100] = "Hello ";
if(argc>1)
{
strcat(message, argv[1]);
strcat(message, "\n");
}
else
{
strcat(message, "there\n");
}
printf("%s", message);
return 0;
}
据我所知,该论点现在应该是名称文件的内容。但是在程序中我无法检测到任何参数(并打印出“Hello there”)。
答案 0 :(得分:4)
这将读取文件name
并将其放在标准输入中,而不是第一个参数中。
您可以使用fgets
,getchar
,scanf
等来阅读。
等价物:
int c;
printf("Hello ");
while((c = getchar()) != EOF) {
putchar(c);
}
puts("\nthere");
答案 1 :(得分:0)
提供输入重定向与提供参数不同。
输入重定向意味着提供的文件将作为标准输入。
所以如果你需要文件名作为参数,那么就像这样写
./ hello name
但是通过查看你的程序,我会说你可能犯了一个逻辑错误。通过运行我上面提到的命令,您将获得“Hello name&#39;打印在屏幕上。您保存在名为&#39; name&#39;的文件中的实际名称。不会被打印出来。