1

我正在尝试重定向程序的输入。这是我在终端中输入的命令:

./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”)。

4

2 回答 2

4

这将读取文件name并将其放入标准输入中,而不是第一个参数中。

fgets您可以使用, getchar,scanf等来阅读它。

等价物:

int c;

printf("Hello ");

while((c = getchar()) != EOF) {
    putchar(c);
}

puts("\nthere");
于 2013-09-29T20:49:42.707 回答
0

提供输入重定向与提供参数不同。

输入重定向意味着提供的文件将作为标准输入工作。

所以如果你需要文件名作为参数,就这样写

./你好名字

但是通过查看您的程序,我会说您可能犯了一个逻辑错误。通过运行我上面提到的命令,您将在屏幕上打印“Hello name”。您保存在名为“name”的文件中的实际名称将不会被打印。

于 2013-09-29T21:22:31.567 回答