使用联合标记引用结构内的联合给出了错误的地址
我需要在如下定义的结构内声明一个联合:
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_DataType &当我认为我正在写入 m_Buff 缓冲区时,m_DataLength 成员。
我正在使用 Visual Studio 2008。任何人都可以解释这种意外行为吗?谢谢。
I had a need to declare a union inside a structure as defined below:
struct MyStruct
{
int m_DataType;
DWORD m_DataLen;
union theData
{
char m_Buff [_MAX_PATH];
struct MyData m_myData;
} m_Data;
};
Initially, I tried accessing the union data as follows (before I added the m_Data declaration):
MyStruct m_myStruct;
char* pBuff = m_myStruct.theData::m_Buff;
This compiles but returns to pBuff a pointer to the beginning of the MyStruct structure which caused me to overwrite the m_DataType & m_DataLength members when I thought I was writing to the m_Buff buffer.
I am using Visual Studio 2008. Can anyone explain this unexpected behavior? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你应该这样写:
我希望我知道它是如何按书面方式编译的。
You should be writing:
I wish I knew how it was compiling as written.
它不应该编译。 GCC 对这段代码感到厌恶:)
It shouldn't compile. GCC barfs at this code with :)
你不是这个意思吗?
Don't you mean this?