我有以下最小的例子,我没有得到,为什么我的结构大小是错误的。我期待输出为50,而我得到1.我做错了什么?
1.) [foo, bar, baz] UNION/U ([foo,bar] INTERSECT [bar])
2.) [foo, bar] MINUS/- [bar]
3.) [foo, bar, baz, cat] INTERSECT/∩ [baz, cat]
4.) [a,b,c,d] UNION/U [d,e,f]
由于我没有条目数,为我生成的函数(现在是50,但它可以动态改变),我如何#include <stdio.h>
#include <stdlib.h>
typedef struct prod {
char *x;
} prod_t;
typedef struct obj {
prod_t *things;
} obj_t;
#define LARGE_BUF 100
#define CHAR_BUF 20
obj_t *func1(obj_t *t) {
t->things = malloc(sizeof(prod_t) * LARGE_BUF);
for (uint16_t i = 0; i < 50; i++) {
t->things[i].x = malloc(sizeof(char) * CHAR_BUF);
t->things[i].x = "hello";
}
return t;
}
int main(int argc, char **argv) {
obj_t *var = malloc(sizeof(obj_t));
var = func1(var);
printf("%lu\n", sizeof(var->things)/sizeof(var->things[0]));
return 0;
}
这个?
是在结构中引入字段的唯一选择,以跟踪实际的数组大小吗?
答案 0 :(得分:4)
是的,您需要在结构中添加另一个成员。例如,字符串包装类型会跟踪其中的字符数:
typdef struct {
char *base;
size_t n;
} string;
注意n
属于size_t
,而非int
。