【发布时间】:2011-06-27 14:41:55
【问题描述】:
我目前正在开发一个程序,它以 8 位 ASCII 模式从文本文件中读取字符串,我创建了一个函数将该字符串分配给 wchar_t*
这里我使用atlconv.h 和USES_CONVERSION 宏将字符串转换为wstring。所以这里是代码:
void CSampleProvider::getCopy(CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR *a, const string s) {
USES_CONVERSION;
wstring temp(A2W (s.c_str ()));
a->pszLabel = new WCHAR(temp.length()+1);
if (!a->pszLabel)
return;
wcscpy_s(a->pszLabel, temp.size()+1, (LPWSTR)temp.c_str());
::MessageBox(NULL,s.c_str(),"getCopy",0);
return;
}
我使用调试器逐行观察。它运行良好(即 a->pszLabel 的内容与我预期的一样,与 s 的内容相同)直到它返回。当它返回时,弹出一个错误:
First-chance exception at 0x770f3067 in CPTest.exe: 0xC0000005: Access violation reading location 0x00200074.
Unhandled exception at 0x770f3067 in CPTest.exe: 0xC0000005: Access violation reading location 0x00200074.
有谁知道如何解决这个问题?请告诉我。非常感谢您的回答:)
谢谢, 雷纳杜斯
编辑:哦,是的,类型 CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR 是一个结构,它的成员之一是 pszLabel,它是一个 wchar_t*
【问题讨论】:
-
您的字符串中是否有
t? “阅读位置”似乎取决于s的内容? -
是的,实际上我在那里构建新的 WCHAR 时犯了错误。请看答案,它解决了我的问题:)
标签: visual-c++ character-encoding access-violation