首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个困惑的有关问题,可能是内存对齐的原因

2012-03-06 
一个困惑的问题,可能是内存对齐的原因typedef struct tagTiger{WCHARid[8]WCHARname[16]charfilePath[12

一个困惑的问题,可能是内存对齐的原因
typedef struct tagTiger
{
WCHARid[8];
WCHARname[16];
charfilePath[128];
doubleprice;
WCHAR*introText;
intintroLen;
}Tiger,*pTiger;
这是我定义的一个结构体,错误就出现在id和name2个字端上
StringCchCopyW((*tiger)[i].name, 16, (LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("NAME"));
StringCchCopyW((*tiger)[i].id, 8, (LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("UID"));
(LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("UID")返回的是10000001,这值是正常的
(LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("NAME")返回的是老虎,也是正常的
但是(*tiger)[i].id="1000000",(*tiger)[i].name="老虎"
如果把StringCchCopyW((*tiger)[i].id, 8, (LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("UID"));改成
StringCchCopyW((*tiger)[i].id, 9, (LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("UID"));
(*tiger)[i].id="10000001",(*tiger)[i].name=""
如果把数据结构中id[8]改成id[10],StringCchCopyW((*tiger)[i].id, 10, (LPCWSTR)(_bstr_t)m_pRecordset->GetCollect("UID"));
则无错误出现
疑似内存对齐问题,还请高手帮我解答

[解决办法]
字符串操作通常需要一个隐藏的 末尾的\0 字符,8字符空间最多适合操作strlen = 7 的字符串
[解决办法]
你定义的是WCHAR,本来就是8*2=16字节.

热点排行