函数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或类似的东西),当你读入时 ,你将有一个终止空值。
我已经为fread
和bzero
链接了两个手册页,我希望能帮到你。
对不起,我有点迟到了。
不,fread不会为你处理这件事。 必须手动完成。 幸运的是它并不难。 我喜欢使用fread()的返回来设置NUL,如下所示:
char buffer[16+1]; /*leaving room for '\0' */ x = fread(buffer, sizeof(char), 16, stream); buffer[x]='\0';
现在你有一个\ 0终止的字符串,作为奖励,我们有一个漂亮的变量x,这实际上节省了我们运行strlen()的麻烦,如果我们以后需要它。 整齐!