联合中的数据被覆盖

时间:2017-10-30 19:09:03

标签: c pointers struct unions

此刻我正在努力解决这个问题。我有一个union,它有一个成员struct +变量,成员struct还包含一个成员struct + variables,这个成员struct包含变量。

我发现在尝试为特定变量赋值时,我最终会覆盖一些先前分配的数据。我很好,这是因为指针没有增加。下面是一些示例代码:

 $.ajax({
 url: 'destinationURL',
 type: "POST", //This is what you should chage
 dataType: "application/json; charset=utf-8",
 username: "FAA/uttam ctr dhakal", // Most SAP web services require credentials
 password: "MEETfamily2018",
 processData: false,
 contentType: "application/json",
 headers: {"Access-Control-Allow-Origin" : "(TRIED WITH Destination/Source 
 Both URLs)",
  },
 success: function () {
     alert("success");
 },
  error: function (xhr, ajaxOptions, thrownError) { //Add these parameters to 
  display the required response
     alert(xhr.status);
     alert(xhr.responseText);
 },
});

我得到以下输出:

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;
}

有人可以指出我正确的方向。

亲切的问候 大卫

1 个答案:

答案 0 :(得分:3)

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

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