一个困惑的问题,可能是内存对齐的原因
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字节.