C中的I / O重定向

时间:2014-07-29 09:47:19

标签: c file io io-redirection

我正在编写此代码,以便将标准输入重定向到文件

 #include <stdio.h>

int main() {
    FILE* log = fopen("log.txt", "a");
    char c = ' ';
    while (c != 'q') {
        scanf("%c", &c);
        printf("%c", c);
        fputs(&c, log);
    }

    fclose(log);

}

但是当我输入:&#34; Hello worldq&#34;时,我在日志文件中得到了这个:

H˜|‚ue˜|‚ul˜|‚ul˜|‚uo˜|‚u ˜|‚uw˜|‚uo˜|‚ur˜|‚ul˜|‚ud˜|‚uq˜|‚u

这是什么〜|,你和我该如何解决?

2 个答案:

答案 0 :(得分:1)

请勿使用fputs,请将其替换为正确使用fputc(c, log)fprintf(log, "%c", c)

您正在使用fput,它假设first是一个以\0结尾的字符串,导致过度读取,从而导致未定义的行为。

根据您不了解的因素,您可能会获得˜|‚或其他内容,甚至可能会出现细分错误。

来自手册页

  

fputc()将字符c(强制转换为无符号字符)写入流。
  fputs()将字符串s写入流,而不终止null   字节('\ 0')。

答案 1 :(得分:0)

fputs期望NUL终止字符串

您传递的是char的地址,它没有任何0终止符。您的代码具有未定义的行为。如果要打印char,只需使用fputc()