在redis中有一个名为sdahdr
的结构:
struct sdahdr
{
int len;
int free;
char buf[];
}
为什么不使用char *buf
,为什么sizeof(sdahdr) == 8
而不是12?
答案 0 :(得分:3)
char buf[]
是字符串的占位符。由于字符串的最大长度在编译时是未知的,因此struct保留了它的名称,因此可以正确地处理它。
在运行时分配内存时,分配必须包括字符串的长度加上struct的size,然后可以使用字符串传递结构,可以通过数组访问。
char *s = "test";
struct sdahdr *p = malloc(sizeof(struct sdahdr)+strlen(s)+1);
strcpy(p->buf, s);