为什么char buf []而不是redis的sdahdr结构中的char * buf

时间:2013-12-07 15:32:53

标签: c redis

在redis中有一个名为sdahdr的结构:

struct sdahdr
{
int len;
int free;
char buf[];
}

为什么不使用char *buf,为什么sizeof(sdahdr) == 8而不是12?

1 个答案:

答案 0 :(得分:3)

char buf[]是字符串的占位符。由于字符串的最大长度在编译时是未知的,因此struct保留了它的名称,因此可以正确地处理它。

在运行时分配内存时,分配必须包括字符串的长度加上struct的size,然后可以使用字符串传递结构,可以通过数组访问。

 char *s = "test";
 struct sdahdr *p = malloc(sizeof(struct sdahdr)+strlen(s)+1);
 strcpy(p->buf, s);