这是一个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);
}
Run Code Online (Sandbox Code Playgroud)
我预计会有没有问题,但它显示了一些不同的结果,打印出一个奇怪的名称值而不是显示正确的值.
Name: \257
Age: 175
Height: 175
Run Code Online (Sandbox Code Playgroud)
任何好的解决方案将非常感谢.谢谢!
我想你可能会把结构与联合混淆.在联合中,元素共享内存.
这意味着当你写入age你的联盟领域时,你同时会覆盖height和的内容name,这不是你想要的.当height你写到最后写的地方时,同样适用.您可以很好地观察到,因为最终age是相同的值,height并且第一个字符name实际上是字符编号175(显示为转义的八进制\257).
尝试使用struct而不是union.