这里有一个C代码,它将成员信息输出到控制台。
#include "learnc0006.h"
#include "stdio.h"
#include "string.h"
union Member {
char name[20];
int age;
int height;
};
void printMember(union Member data);
int learnc0006() {
union Member data;
strcpy(data.name, "Rico Angeloni");
data.age = 30;
data.height = 175;
printMember(data);
return 0;
}
void printMember(union Member data) {
printf("Name: %s\n", data.name);
printf("Age: %d\n", data.age);
printf("Height: %d\n", data.height);
}我原以为不会有问题,但是它显示出了一些不同的结果,打印出了一个奇怪的名称值,而不是显示正确的名称。
Name: \257
Age: 175
Height: 175任何好的解决方案都将不胜感激。谢谢!
发布于 2015-07-25 09:34:58
我想你可能把结构和工会搞混了。在联合中,元素共享内存。
这意味着,当您写入您的联合的age字段时,您同时要覆盖height和name的内容,这不是您想要的。当您写信给height时,同样的情况也是如此,在那里您写的是最后一次。您可以很好地观察到这一点,因为最终age是与height相同的值,而name的第一个字符实际上是175号字符(显示为转义的八进制\257)。
尝试使用struct而不是union。
https://stackoverflow.com/questions/31625062
复制相似问题