两个结构变量在 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 a
的 name_v
将保存值 "HELLO PEEPS"
而 struct name b
将保持 '[=16=]'
。
但是上面代码的输出是
HELLO PEEPS HELLO PEEPS
但我预计它会显示其他内容 (null?) 来代替第二个 HELLO PEEPS
。
所以似乎联合体的两个成员同时被赋予相同的值。 (???)
• 为什么会这样?
• 为什么我没有得到预期的输出?
• 我做错了什么让我无法做到?
我希望其中一个联合成员具有空值,而另一个拥有一些有效值并希望能够对其进行检查。请帮我实现这个目标。
联合允许您将数据放在相同的内存位置。
它们也只有最大的成员那么大。
您将 "HELLO PEEPS" 存储在一个结构中,而在另一个结构中什么也没有。然后读出一个将得到与另一个相同的结果。 (它们从相同的内存地址开始)。
我有一个包含两个结构变量的联合。该结构包含一个字符串(字符数组)。
这是我的代码:
#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 a
的 name_v
将保存值 "HELLO PEEPS"
而 struct name b
将保持 '[=16=]'
。
但是上面代码的输出是
HELLO PEEPS HELLO PEEPS
但我预计它会显示其他内容 (null?) 来代替第二个 HELLO PEEPS
。
所以似乎联合体的两个成员同时被赋予相同的值。 (???)
• 为什么会这样?
• 为什么我没有得到预期的输出?
• 我做错了什么让我无法做到?
我希望其中一个联合成员具有空值,而另一个拥有一些有效值并希望能够对其进行检查。请帮我实现这个目标。
联合允许您将数据放在相同的内存位置。
它们也只有最大的成员那么大。
您将 "HELLO PEEPS" 存储在一个结构中,而在另一个结构中什么也没有。然后读出一个将得到与另一个相同的结果。 (它们从相同的内存地址开始)。