typedef struct STRDESCRIPTION
{
string strInfo1;
string strInfo2;
string strInfo3;
}STRDESCRIPTION;
//定义结构体对象
STRDESCRIPTION m_oDescription;
//向结构体中赋值
void MyParser::characterDataHandler(const char *text, size_t len)
{
if(m_DCTag == DCTIT)
{
strncpy((char *)m_oDescription.strInfo1.c_str(),text,len);
}
else if(m_DCTag == DCCRE)
{
strncpy((char *)m_oDescription.strInfo2.c_str(),text,len);
}
else if(m_DCTag == DCSUB)
{
strncpy((char *)m_oDescription.strInfo3.c_str(),text,len);
}
}
上面的代码确实能够将text的内容传给结构体。但是现在出现了strInfo1正常,strInfo2也正常,strInfo3异常的情况。
通过跟踪发现在strInfo2拷贝完后strInfo3也已经有了值,分析内存地址后发现:原来strInfo2的地址是70538而strInfo3的地址是70558,也就说strInfo2只能存放32个字节,而strInfo2的长度超过32个后就放入strInfo3里,异常发生。
请问,我这样定义结构体为什么分配的内存是连续空间?
解决方法我知道是使用string的append函数,但是为什么不能使用strncpy对指针进行操作?
谁能帮我分析这样清楚产生的原因。