gpt4 book ai didi

c - c 中结构的大小等于 1

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:43 25 4
gpt4 key购买 nike

出于某种原因,如果我尝试获取 mystruct 的实际大小,我会一直获取大小 1。

我知道 mystruct 正在保存数据,因为我可以将其转储出来,所有内容都在 mystruct 中。

获得尺寸 1 的原因可能是什么?谢谢

// fragments of my code
struct mystruct {
char *raw;
int count;
};

struct counter {
int total; // = 30
}

static struct mystruct **proc()
{
int i = 0;
gchar *key,*val;
struct mystruct **a_struct;
struct counter c;

a_struct = (struct mystruct **)malloc(sizeof(struct mystruct *)*c.total);
while (table (&iter, (gpointer) &key, (gpointer) &val)) {

a_struct[i] = (struct mystruct *)malloc(sizeof(struct mystruct));
a_struct[i]->raw = (char*)key;
a_struct[i++]->count = (int)val;

}

size_t l = sizeof(a_struct) / sizeof(struct mystruct*);
printf("%d",l); // outputs 1
}

最佳答案

你做错了几件事。首先,您要使用 sizeof(a_struct) ,这将是一个指针的大小(因为这就是 a_struct 是什么),然后除以另一个指针的大小.保证 1.

除此之外,您为什么要进行除法?我想你想要的是:

size_t l = sizeof(struct mystruct);

size_t l = sizeof(**a_struct);

编辑:

我想我现在明白了你们 split 的原因;您正在尝试查找该数组的大小。这行不通 - sizeof 只能在 C 的编译时工作(C99 中有一些特殊的异常(exception)情况不适用于您的代码),因此它无法计算出 a 的大小像这样的动态数组。

关于c - c 中结构的大小等于 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2419881/

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