我如何正确找出结构数组的大小是多少?

时间:2018-02-02 01:23:12

标签: c arrays pointers struct

我有以下最小的例子,我没有得到,为什么我的结构大小是错误的。我期待输出为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; } 这个?

是在结构中引入字段的唯一选择,以跟踪实际的数组大小吗?

1 个答案:

答案 0 :(得分:4)

是的,您需要在结构中添加另一个成员。例如,字符串包装类型会跟踪其中的字符数:

typdef struct {
    char *base;
    size_t n;
} string;

注意n属于size_t,而非int