struct结构体的变长特性
1 #include <iostream> 2 3 using namespace std; 4 5 struct mumble 6 { 7 char pc[0]; 8 }; 9 10 void main() 11 { 12 char* string="hello world\n"; 13 pmumble=(struct mumble*)malloc(sizeof(struct mumble)+strlen(string)+1); 14 strcpy(pmumble->pc,string); 15 cout<<pmumble->pc; 16 //struct mumble m[2];不允许变长结构体为数组,因为数组是连续的,而struct长度未知 17 system("pause"); 18 }
同理
struct mumble { char pc[0]; int i; };
这种结构体也是不允许的,应该把char pc[0]放在最后,一个结构体里只允许一个char pc[0],也就是说只允许有一个数据成员是不定长的。
struct mumble { char ptr_a[0]; char ptr_b[0]; };
上面结构体也会出现编译错误
struct mumble { char ptr[]; };
最好写成上面结构体,这才是标准写法
参考资料:http://blog.sina.com.cn/s/blog_4a3c301c0100fvkj.html
http://hi.baidu.com/zkheartboy/blog/item/e036eded2da4b44a79f055f7.html