为什么结构变量'e'没有大小,而它的元素被声明和初始化?
#include <stdio.h>
int main ()
{
struct e1
{
int a[0];
};
struct e1 e;
e.a[0] = 2;
printf ("%d\n", e.a[0]);
printf ("%d", sizeof (e));
}
输出是
2
0
最佳答案
您在这里超出了缓冲区:
e.a[0] = 2;
这会调用未定义的行为。
程序不需要崩溃。事实上,它可能看起来运行得很好,但你正在浪费一些其他内存,程序可能随时崩溃。
要安全地执行此操作,您必须增加数组的大小以容纳至少一个元素:
struct e1
{
int a[1];
};
关于能否请您说明为什么存储了变量值,但结构的大小仍然是 0 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175222/