两个结构变量在 union 中获得相同的值

Both struct variables getting same value inside union

我有一个包含两个结构变量的联合。该结构包含一个字符串(字符数组)。

这是我的代码:

#include <stdio.h>
#include <string.h>

int main(void) {
    struct name{
        char name_v[50];
    };

    union myunion{
        struct name a;
        struct name b;
    }x;

    strcpy(x.a.name_v, "HELLO PEEPS");

    printf("%s\t%s", x.a.name_v, x.b.name_v);

    return 0;
}

由于联合分配了足够的内存来保存给定时间的最大值,我认为只有 struct name aname_v 将保存值 "HELLO PEEPS"struct name b 将保持 '[=16=]'

但是上面代码的输出是

HELLO PEEPS        HELLO PEEPS

但我预计它会显示其他内容 (null?) 来代替第二个 HELLO PEEPS

所以似乎联合体的两个成员同时被赋予相同的值。 (???)

• 为什么会这样?
• 为什么我没有得到预期的输出?
• 我做错了什么让我无法做到?

我希望其中一个联合成员具有空值,而另一个拥有一些有效值并希望能够对其进行检查。请帮我实现这个目标。

联合允许您将数据放在相同的内存位置。

它们也只有最大的成员那么大。

您将 "HELLO PEEPS" 存储在一个结构中,而在另一个结构中什么也没有。然后读出一个将得到与另一个相同的结果。 (它们从相同的内存地址开始)。