如何获得具有动态分配内容的结构的大小? (C)

时间:2016-10-15 16:29:15

标签: c struct binaryfiles

我目前正面临一个问题,我想在二进制文件中保存结构,但每次结构的大小似乎都是错误的。

以下是我的结构代码:

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个字节。任何帮助都会非常感激。

感谢阅读。

1 个答案:

答案 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 

矩阵和名称中的实际内容存储在内存中的另一个位置,结构中的那些指针只指向该位置。