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

Mar*_*Lee 3 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);
}
Run Code Online (Sandbox Code Playgroud)

我预计会有没有问题,但它显示了一些不同的结果,打印出一个奇怪的名称值而不是显示正确的值.

Name: \257
Age: 175
Height: 175
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*fer 8

我想你可能会把结构与联合混淆.在联合中,元素共享内存.

这意味着当你写入age你的联盟领域时,你同时会覆盖height和的内容name,这不是你想要的.当height你写到最后写的地方时,同样适用.您可以很好地观察到,因为最终age是相同的值,height并且第一个字符name实际上是字符编号175(显示为转义的八进制\257).

尝试使用struct而不是union.