两个struct变量在union中都获得相同的值

时间:2017-10-17 18:01:01

标签: c struct unions

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

这是我的代码:

#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;
}

由于联合分配了足够的内存以在给定时间保持最高值,我认为仅name_v的{​​{1}}将保留值struct name a和{{1}将保留"HELLO PEEPS"

但是,上面代码的输出是

struct name b

但是我希望它能显示其他东西(null?)来代替第二个'\0'

因此似乎联盟的两个成员同时被分配了相同的值。 (???)

•为什么会发生这种情况? •为什么我没有得到预期的输出?
•我做错了什么不能让我接受它?

我希望其中一个联盟成员在另一个拥有一些有效值并且希望能够检查它时携带空值。请帮助我实现这一目标。

1 个答案:

答案 0 :(得分:2)

Unions允许您将数据放在同一个内存位置。

他们也只是最大的成员。

你将“HELLO PEEPS”存储在一个结构中,而在另一个结构中没有任何东西..然后读出一个会给你与另一个结构相同。 (它们从相同的内存地址开始)。