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

时间:2012-01-15 11:42:14

标签: c fread

C语言中的新文件,试图通过fread

读取文件

以下是文件的内容:

line1 how

使用的代码:

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

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

fread不会终止字符串,还是我错过了什么?

3 个答案:

答案 0 :(得分:11)

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

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

就个人而言,我会选择fgets

答案 1 :(得分:2)

man page for fread没有说明在文件末尾添加终止零。

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

我已将freadbzero的两个手册页链接起来,我希望能帮到你。

答案 2 :(得分:1)

对不起,我有点迟到了。 不,fread不会为你处理这件事。必须手动完成。 幸运的是它并不难。 我喜欢使用fread()的返回来设置NUL,如下所示: char buffer [16 + 1]; / *留出'\ 0'的空间* / x = fread(buffer,sizeof(char),16,stream); 缓冲器[X] = '\ 0'; 现在你有一个\ 0终止的字符串,作为奖励,我们有一个漂亮的变量x,这实际上节省了我们运行strlen()的麻烦,如果我们以后需要它。整齐!