作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写此代码是为了将标准输入重定向到文件
#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);
}
但是当我输入:“Hello worldq”时,我在日志文件中得到以下内容:
H˜|‚ue˜|‚ul˜|‚ul˜|‚uo˜|‚u ˜|‚uw˜|‚uo˜|‚ur˜|‚ul˜|‚ud˜|‚uq˜|‚u
这是什么~|,u,我该如何修复它?
最佳答案
不要使用fputs
,而是正确使用fputc(c, log)
或fprintf(log, "%c", c)
您使用的 fputs 假设首先是一个以 \0
结尾的字符串,导致过度读取,从而导致未定义的行为。
您可能会得到 ~|‚
或其他内容,甚至可能出现段错误,具体取决于您不知道的因素。
来自手册页
fputc() writes the character c, cast to an unsigned char, to stream.
fputs() writes the string s to stream, without its terminating null byte ('\0').
关于c - C 中的 I/O 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012441/
我是一名优秀的程序员,十分优秀!