函数fread没有通过\ 0终止字符串

C语言中的新文件,尝试通过fread读取文件

这是文件的内容:

line1 how 

使用的代码:

 char c[6]; fread(c,1,5,f1) 

输出var’c’时,内容在末尾显示随机字符(例如:line1 *)

fread不会终止字符串或我错过了什么?

fread函数只是读取了许多元素,它没有“字符串”的概念。

  • 您可以自己添加NUL终结器
  • 您可以改用fgets / fscanf

我个人会跟fgets一起去。

fread的手册页没有说明在文件末尾添加终止零。

如果你想要安全,将c数组中的所有字节初始化为零(通过bzero或类似的东西),当你读入时 ,你将有一个终止空值。

我已经为freadbzero链接了两个手册页,我希望能帮到你。

对不起,我有点迟到了。

不,fread不会为你处理这件事。 必须手动完成。 幸运的是它并不难。 我喜欢使用fread()的返回来设置NUL,如下所示:

 char buffer[16+1]; /*leaving room for '\0' */ x = fread(buffer, sizeof(char), 16, stream); buffer[x]='\0'; 

现在你有一个\ 0终止的字符串,作为奖励,我们有一个漂亮的变量x,这实际上节省了我们运行strlen()的麻烦,如果我们以后需要它。 整齐!