Tag: 未定义行为

是“结构黑客”技术上未定义的行为?

我所问的是众所周知的“结构的最后一个成员具有可变长度”的技巧。 它是这样的: 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 。 所以问题是: 这种技术在技术上是不确定的行为? 。 我希望是这样,但是很奇怪这个标准是怎么说的。 PS:我知道C99的方法,我希望答案专门针对上面列出的技巧的版本。