我正在编写此代码,以便将标准输入重定向到文件
#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
这是什么〜|,你和我该如何解决?
答案 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()
。