0长度的数组在ISO C和C++的规格说明书中是不允许的,但是由于gcc 预先支持C99的这种玩法,所以,“零长度数组”在gcc环境下是合法的。
先看下面两个例子。
pzeroLengthArray.c
#include <stdio.h>
struct str
{
int len;
char *s;
};
struct foo
{
struct str *a;
};
int main()
{
struct foo f = {0};
printf("sizeof(struct str) = %d\n", sizeof(struct str));
printf("before f.a->s.\n");
if(f.a->s)
{
printf("before printf f.a->s.\n");
printf(f.a->s);
printf("before printf f.a->s.\n");
}
return 0;
}
zeroLengthArray.c
#include <stdio.h>
struct str
{
int len;
char s[0];
};
struct foo
{
struct str *a;
};
int main()
{
struct foo f = {0};
printf("sizeof(struct str) = %d\n", sizeof(struct str));
printf("before f.a->s.\n");
if(f.a->s)
{
printf("before printf f.a->s.\n");
printf(f.a->s);
printf("before