从stdin读取文件时出错

时间:2018-04-05 18:24:46

标签: c

以下代码是从stdin读取文件,但它无法找到该文件,我无法找到错误。有人可以帮忙。

FILE *file; 
char filename[200];// "ROMAN_in.txt";
char buffer[1000];

if (fgets(filename, sizeof(filename), stdin) == NULL) // from 
stdin(keyboard) to store it in filename 
{
    printf("Error");
    return 1; 
}

file = fopen(filename, "r");

if (file == NULL)
{
    fprintf(stderr, "File %s not found\n", filename);
    return 1;
}
else
{
    while (fgets(buffer, strlen(buffer), file) != NULL)
    {
        printf("%s", buffer);
    }
}

1 个答案:

答案 0 :(得分:0)

在这一行:

while (fgets(buffer, strlen(buffer), file) != NULL)

看起来strlen(buffer)在未明确初始化的全局数组中从buffer返回0。因此它被初始化为0。因此strlen将返回0.

可能在您的情况下,您应该使用sizeof(buffer)

P.S。

尝试使用调试器。您将立即看到if条件进入意外路径。

编辑1:

当然,正如评论中 Weather Vane 所述,fgets会返回带有\n字符的字符串(回车键)。在将其用作文件名(Howto link)之前,您需要摆脱它。