0

我需要在如下定义的结构中声明一个联合:

struct MyStruct
{
    int    m_DataType;
    DWORD  m_DataLen;
    union theData
    {
        char    m_Buff [_MAX_PATH];
        struct MyData m_myData;
    } m_Data;
};

最初,我尝试按如下方式访问联合数据(在添加 m_Data 声明之前):

MyStruct m_myStruct;

char* pBuff = m_myStruct.theData::m_Buff;

这会编译,但会向 pBuff 返回指向 MyStruct 结构开头的指针,当我认为我正在写入 m_Buff 缓冲区时,这会导致我覆盖 m_DataType 和 m_DataLength 成员。

我正在使用 Visual Studio 2008。任何人都可以解释这种意外行为吗?谢谢。

4

3 回答 3

2

你应该写:

char *pBuff = m_myStruct.m_Data.m_Buff;

我希望我知道它是如何编译的。

于 2010-04-13T03:41:44.630 回答
2

它不应该编译。GCC barfs 在这段代码中:)

union.cpp:17:错误:“MyStruct::theData”不是“MyStruct”的基础
于 2010-04-13T03:49:49.667 回答
1

你不是这个意思吗?

char* pBuff = m_myStruct.m_Data.m_Buff;
于 2010-04-13T03:42:33.890 回答