“struct hack”在技术上是未定义的行为吗?
我要问的是众所周知的“结构的最后一个成员有可变长度”的技巧。它是这样的:
struct T { int len; char s[1];};struct T *p = malloc(sizeof(struct T) + 100);p->len = 100;strcpy(p->s, "hello world");
由于结构在内存中的布局方式,我们能够将结构覆盖在一个大于必要的块上,并将最后一个成员视为大于1 char指定。
1 char
所以问题是:这种技术在技术上是未定义的行为吗?..我原以为是这样的,但我很好奇标准是怎么说的。
PS:我知道C99的方法,我希望答案特别坚持上面列出的技巧版本。
杨__羊羊
相关分类