关于fread的读取方式
本帖最后由 nowsuhan 于 2013-07-01 13:43:54 编辑 关于将文件流数据读入结构体。譬如下面的这段代码。
FILE* file_p;
typedef struct {
int data[10];
char name[10];
}BUF_t;
BUF_t buf;
file_p = fopen("xxx", "r");
fread(&buf, sizeof(buf), 1, file_p);
这段代码我随手敲的,不一定严谨正确,仅表义用。
这段代码中,fread讲file_p中的一段数据读入buf中。
是不是因为buf为一完整结构体,地址空间连续,这样读入的数据就自动按顺序填入buf对应的data数组和name数组中?
谢谢各位大虾 C fread struct
[解决办法]
是坑爹六字符
[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
[解决办法]
typedef struct {
int data[10];
char name[10];
}BUF_t;
你要考虑到一个问题就是你这个struct没有四字节对其,这个对操作可能会有一点影响,
最好写成
typedef struct {
int data[10];
char name[12];
}BUF_t;
[解决办法]
应该是这样的.你可以自己调试一下就清楚了.别人回答的也不一定对,动手实践一下,会得到更多.
[解决办法]
对于楼主的数据是可以的,但应该养成如下习惯:
fread(&buf.data, sizeof(buf.data), 1, file_p);
fread(&buf.name, sizeof(buf.name), 1, file_p);
以免遇到写入和读取的填充字节数不同的问题。