我目前正面临一个问题,我想在二进制文件中保存结构,但每次结构的大小似乎都是错误的。
以下是我的结构代码:
typedef struct {
int lines;
int columns;
int ** matrix;
char * name;
} labyrinthe;
这就是我将它保存在文件中的方式:
void writeInFile (labyrinthe * l, FILE * f) {
fwrite(l, sizeof(l), 1, f); //already tried with &l instead of l
}
但是,即使矩阵大小为111 * 111网格,文件也总是包含22个字节。任何帮助都会非常感激。
感谢阅读。
答案 0 :(得分:4)
嗯,实际上结构存储了你告诉它存储的内容,那就是:
2个int,一个int指针(指向另一个指针)和一个指向char的指针 我认为你的系统sizeof(int)= 4和sizeof(type *)= 8,这就是你的文件中有24个字节的原因。
为了更清楚地看一下:
#include<stdlib.h>
#include<stdio.h>
typedef struct {
int lines;
int columns;
int ** matrix;
char * name;
} labyrinthe;
int main(void)
{
FILE *f = fopen("file","w+b");
labyrinthe *l;
l=malloc(sizeof(labyrinthe));
l->lines=1;
l->columns=2;
l->matrix = 0xABCDABCDABCDABCD;
l->name = 0x5000B00B;
fwrite(l, sizeof(*l), 1, f);
return 0;
}
文件的hexdump看起来像这样(由于字节顺序而切换字节顺序)
|lines4b |collumns 4b| matrix 8 bytes | name 8 bytes |
0001 0000 0002 0000 abcd abcd abcd abcd b00b 5000 0000 0000
矩阵和名称中的实际内容存储在内存中的另一个位置,结构中的那些指针只指向该位置。