gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:45 24 4
gpt4 key购买 nike

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

这是我的结构代码:

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
}

但是,文件始终恰好包含 22 个字节,即使矩阵大小为 111*111 网格也是如此。非常感谢任何帮助。

感谢阅读。

最佳答案

好吧,实际上这个结构存储了你告诉它要存储的内容,那就是:

2 个整数,一个 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 | columns 4b | matrix 8 bytes      | name 8 bytes     |
0001 0000 0002 0000 abcd abcd abcd abcd b00b 5000 0000 0000

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

关于c - 如何获取具有动态分配内容的结构的大小? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com