分类: C/C++
2009-07-26 10:21:26
struct arr{
int a;
char buff[0];
}
int main(int argc,char **argv)
{
struct arr *ptr;
ptr = (struct att *)malloc(sizeof(struct arr)+4);
if(ptr == NULL){
printf(“malloc failed\n”);
reutn -1;
}
memset(ptr,0x30,sizeof(struct arr)+4);
printf("0x%x0x%x0x%x0x%x\n",
ptr->buff[0],ptr->buff[1],ptr->buff[2],ptr->buff[3]);
char b[0];
printf(“%d %d %d\n”,sizoef(struct arr),sizoef(int),sizeof(b[0]));
}
其中malloc分配了数据结构struct arr的大小再加上4个字节大小,实际上sizoef(struct arr) = 4 = sizoef(int),不包括零长度数组的大小,所以memset之后,buff的内容都是0x30,sizeof(b[0]) = 1。