【发布时间】:2012-02-10 18:21:43
【问题描述】:
C 中的文件新手,尝试通过 fread 读取文件
这是文件的内容:
line1 how
使用的代码:
char c[6];
fread(c,1,5,f1)
输出 var 'c' 时,内容以随机字符结尾出现(如:line1*)
fread 不会终止字符串还是我遗漏了什么?
【问题讨论】:
-
fread只将字节读入缓冲区。它对你所说的字符串一无所知。
C 中的文件新手,尝试通过 fread 读取文件
这是文件的内容:
line1 how
使用的代码:
char c[6];
fread(c,1,5,f1)
输出 var 'c' 时,内容以随机字符结尾出现(如:line1*)
fread 不会终止字符串还是我遗漏了什么?
【问题讨论】:
fread 只将字节读入缓冲区。它对你所说的字符串一无所知。
没有。 fread 函数只是读取一些元素,它没有“字符串”的概念。
fgets / fscanf
我个人会选择fgets。
【讨论】:
man page for fread 没有说明在文件末尾添加终止零。
如果您想安全起见,请将您的 c 数组中的所有字节初始化为零(通过 bzero 或类似的方式),当您读入时,您将获得一个终止的 null。
我已经链接了fread 和bzero 的两个手册页,希望对您有所帮助。
抱歉我来晚了。
不,fread 不会为您处理这个问题。必须手动完成。 幸运的是它并不难。 我喜欢使用 fread() 的 return 来设置 NUL,如下所示:
char buffer[16+1]; /*leaving room for '\0' */
x = fread(buffer, sizeof(char), 16, stream);
buffer[x]='\0';
现在你有一个以 \0 结尾的字符串,作为奖励,我们有一个漂亮的变量 x,如果我们以后需要它,它实际上为我们省去了运行 strlen() 的麻烦。整洁!
【讨论】: