c - 从 C 中的 fgets() 获取乱码输出

标签 c fgets

#include <stdio.h>

int main(int argc, char *argv[]) {
  FILE *fp = fopen("sss", "w+");
  char buf[100];
  fputs("hello, world", fp);
  fflush(fp);
  fgets(buf, 100, fp);
  fputs(buf, stdout);
  fclose(fp);
  return 0;
}

有人可以教我我的代码有什么问题吗?下面是我的测试,但我没有得到预期的结果:

% clang test.c
% ./a.out
��h��%  
% cat test.c
hello, world%

我的假设是这是字符编码的问题,但是当我使用 fgets 从现有文件中读取文本时,它工作正常。我所有的文件(和代码)都是用 Emacs 写的,我不知道是什么导致了这个乱码输出

最佳答案

fp 在你写完之后就在最后。在使用 fseek 之前将其移动到初始位置再次阅读:

fflush(fp);
fseek(fp, 0, SEEK_SET);
fgets(buf, 100, fp);

其他选项是fclose它和fopen再次。这取决于你想做什么。

关于c - 从 C 中的 fgets() 获取乱码输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428010/

相关文章:

c - 使用 fgets 和 strtok 从文件中的单行检索单词

c - 逐行读取txt文件,如果没有则覆盖,否则追加到文件中

C编程数据输入错误

c - 模糊图像滤镜 - C

python - PyOpenCL 2D 数组内核 get_global_id(1) 错误

c - 为什么下面的代码无效?

c - 堆栈上分配了多少空间

c - 追加到 C 数组时出现总线错误

C:使用 fread()/fgets() 而不是 fgetc() 逐行读取文本文件(具有可变长度行)( block I/O 与字符 I/O)

c - scanf 之后 fgets 不起作用