C:联合成员在编译时会被破坏

时间:2015-07-25 09:33:10

标签: c

这是一个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

非常感谢任何好的解决方案。谢谢!

1 个答案:

答案 0 :(得分:8)

我认为你可能会混淆struct和union。在联合中,元素共享内存。

这意味着当您写入工会的age字段时,您同时会覆盖heightname的内容,这不是您的意图。当你写到最后写的height时,同样适用。你可以很好地观察,因为最后ageheight的值相同,而name的第一个字符实际上是字符数175(显示为转义的八进制{{ 1}})。

尝试使用\257代替struct