C99 标准允许创建灵活的数组成员,例如
typedef struct pstring {
size_t length;
char string[];
} pstring;
然后用类似的东西初始化它pstring* s = malloc(sizeof(pstring) + len)
。是否允许len
为零?它看起来是一致的,并且不时节省空间会很好(pstring
当然,可能不是这个例子)。另一方面,我不知道下面的代码会做什么:
pstring* s = malloc(sizeof(pstring));
s->string;
这似乎也可能适用于一个编译器而不是另一个编译器,或者在一个操作系统上而不是另一个,或者在某一天而不是另一天,所以我真正想知道的是标准对此有何规定。是malloc
在示例代码中未定义的行为,还是只是对s->string
无效的访问,还是完全是别的东西?