这是一个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
非常感谢任何好的解决方案。谢谢!
答案 0 :(得分:8)
我认为你可能会混淆struct和union。在联合中,元素共享内存。
这意味着当您写入工会的age
字段时,您同时会覆盖height
和name
的内容,这不是您的意图。当你写到最后写的height
时,同样适用。你可以很好地观察,因为最后age
与height
的值相同,而name
的第一个字符实际上是字符数175(显示为转义的八进制{{ 1}})。
尝试使用\257
代替struct
。