最佳答案
我要问的是众所周知的“ struct 的最后一个成员具有可变长度”的技巧。大概是这样的:
struct T {
int len;
char s[1];
};
struct T *p = malloc(sizeof(struct T) + 100);
p->len = 100;
strcpy(p->s, "hello world");
由于 struct 在内存中的布局方式,我们可以将 struct 覆盖在一个大于必要的块上,并将最后一个成员视为大于指定的 1 char
。
所以问题是: 这个技术在技术上有未定义行为吗?。我希望是这样,但是我很好奇这个标准是怎么说的。
PS: 我知道 C99的方法,我想要的答案坚持具体的版本的把戏,如上所列。