从Windows中的文件或命令管道/重定向时出错

时间:2015-09-06 08:30:17

标签: c redirect piping

我创建了一个程序,然后我用它从输出创建一个文件,现在我想让几个程序中的一个运行重定向该文件(或将其他程序的输出传递给它)。 我使用以下代码作为第一个程序的测试

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)停止执行。 我不知道为什么会发生这种情况,我试着冲洗stdin,stdout以及我想到的所有事情而且没有运气。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

char str[100];
while (str != NULL)

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

答案 1 :(得分:0)

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++;
}

解决了这个问题。