【问题标题】:Error piping/redirecting from a file or command in windows从 Windows 中的文件或命令进行管道/重定向错误
【发布时间】:2015-09-06 08:30:17
【问题描述】:

我制作了一个程序,然后用它从其输出创建一个文件,现在我想制作几个程序之一来运行重定向该文件(或将其他程序的输出传送到它)。 我用下面的代码作为第一个程序的测试

int main (int argc, char* argv[])
{

    long long int n = 0;
    char str[100];

    while (str != NULL)
    {
        fscanf(stdin,"%s\0", str);
        printf("%lld\t%s\n", n, str);

        n++;
    }

    return 0;

}

程序正确执行,直到重定向文件或管道输出的最后一行,然后无限重复,直到我用 ctrl-c (Windows) 停止执行。 我不知道为什么会发生这种情况,我尝试刷新标准输入、标准输出和我想到的所有内容,但没有运气。

我做错了什么或错过了什么?

提前致谢。

【问题讨论】:

  • str != NULL 永远不会是假的。查看 scanf 文档,了解它在出现错误/流结束情况时的作用。

标签: c redirect piping


【解决方案1】:
char str[100];
while (str != NULL)

str 被视为指向数组中第一个字符的指针,因此它的值永远不会改变,这意味着循环永远不会终止。

【讨论】:

  • 更改条件以检查 scanf 的返回值也会产生相同的结果。
【解决方案2】:
while (str != NULL)
{
    fscanf(stdin,"%s\0", str);
    printf("%lld\t%s\n", n, str);

    n++;
}

替换为

while (scanf("%s", str) != EOF)
{
    printf("%lld\t%s\n", n, str);
    n++;
}

解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2013-12-21
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多