C 正在覆盖的联合中的数据

C 正在覆盖的联合中的数据,c,pointers,struct,unions,C,Pointers,Struct,Unions,我目前正在努力解决这个问题。我有一个union,它有一个成员结构+变量,成员结构也包含一个成员结构+变量,这个成员结构包含变量 我发现,当试图为特定变量赋值时,我最终会覆盖以前分配的一些数据。我有一种很好的感觉,这是由于指针没有增加。下面是一些示例代码: struct Scale { char Scale_Name[5]; char notes[10]; }; struct Instrument { char Inst_Name[5]; struct Scale

我目前正在努力解决这个问题。我有一个union,它有一个成员结构+变量,成员结构也包含一个成员结构+变量,这个成员结构包含变量

我发现,当试图为特定变量赋值时,我最终会覆盖以前分配的一些数据。我有一种很好的感觉,这是由于指针没有增加。下面是一些示例代码:

struct Scale
{
    char Scale_Name[5];
    char notes[10];
};

struct Instrument
{
    char Inst_Name[5];
    struct Scale scales[5];
};

union Whole_Inst
{
    char InstrumentCount;
    struct Instrument Instruments[2]; 
};

union Whole_Inst Instrument1;

int main(void)
{
    char i, j, k;
    char TempArr[5] = {0x01, 0x02, 0x03, 0x04, 0x05};
    char NUMBER_OF_INST = 1;

    Instrument1.InstrumentCount = TempArr[0];

    printf("InstCount   = 0x%x\n", Instrument1.InstrumentCount);   

    for(j = 0; j < NUMBER_OF_INST; j++)
    {
        for(i = 0; i < 4; i++)
        {
            Instrument1.Instruments[0].Inst_Name[i] = TempArr[i+1];
            printf("\nInstName[%d] = 0x%x", i,  
            Instrument1.Instruments[0].Inst_Name[i]);   
        }
    }

    printf("\n\nInstCount   = 0x%x\n", i,  Instrument1.InstrumentCount);   

    system("PAUSE");    
    return 0;
}
谁能给我指一下正确的方向吗

问候
David

您的
union
允许您存储计数或
仪器数组,但不能同时存储两者。这两段数据共享同一内存。如果你改变了一个,你就重写了另一个使用的内存


如果要同时存储计数和数组,则需要使用
struct
而不是
union

为什么要使用union?它不应该是一个结构吗?当您设置
Instrument1.InstrumentCount
时,实际上是在覆盖仪器数据-联合成员映射到相同的内存空间,因此更改一个成员会更改所有联合成员。你用工会来做这件事是没有意义的。你知道工会是干什么用的吗?这正是它正在做的。我投票结束这个问题,因为C书急需。问这样的问题是一个耻辱,打开维基百科就足够了:在 C和C++中,未标记的工会几乎完全表达类似的结构(结构),除了**每个数据成员都在内存中的相同位置开始。** <代码>
InstCount   = 0x1

InstName[0] = 0x2
InstName[1] = 0x3
InstName[2] = 0x4
InstName[3] = 0x5

InstCount   = 0x4
Press any key to continue . . .