【发布时间】:2018-04-19 10:12:51
【问题描述】:
我正在 Ubuntu 上学习 fopen(),这是我的代码。你能帮忙看看具体的失败原因是什么?
交流
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main() {
char reg_filename[] = "/home/chuck/Documents/enable";
FILE* f;
char val[2];
f = fopen(reg_filename, "r");
if (f == NULL) {
perror(reg_filename);
printf("error\n");
return 1;
}
setvbuf(f, (char *)NULL, _IONBF, 0);
if (fread(&val, sizeof(val), 1, f) == 0) {
perror(reg_filename);
printf("Read_error\n");
return 1;
}
return 0;
}
构建并运行它...
chuck@ubuntu:~/Documents$ gcc a.c
chuck@ubuntu:~/Documents$ ./a.out
/home/chuck/Documents/enable: Success
Read_error
在代码中,“启用”是我系统中的一个文件。 我所知道的是它在 fread() 上失败,因为“Read_error”弹出。但是这个“成功”是什么意思呢?如果失败,为什么会给出“成功”字样?
关于如何使用 fread(),我是全新的......这个 fread() 将从 f(文件路径)读取长度为 val[] 的大小并读取到 val[],对吗?
它是否与 val[] 的大小有关,在这种情况下,我只是把它放在 2 那么 sizeof(val) 应该是 3?那么 fread 将如何将 f (/home/chuck/Documents/enable) 读入其中呢?
【问题讨论】:
-
在命令行中输入
man fread。另外,请注意您在数组上使用运算符的&地址,这不是必需的,实际上它是完全错误的,因为即使两个基地址相同arr + 1与&arr + 1不同。 -
除了前面的评论:你知道
enable文件是空的吗?这就是fread返回 0 的原因,因为它返回读取的项目数,在这种情况下为 0。 -
哦,是的,我的启用是空的。我真是个傻瓜……只需在启用文件中输入一些文字,它就可以正常工作。