以下代码导致崩溃
“ASMaplePro.exe中0x01C006AB处的未处理异常:0xC0000005:访问冲突读取位置0x003A0043”
TCHAR text[512]={0},text2[256]={0};
char text1[128]={0};
strcpy(text1,_T("how are you");
wcscpy(text2,_T(" Bob?"));
swprintf(text,_T("%s\\%s"),(CA2W)text1,text2);
我怀疑是因为我正在同时使用'text'和'list'作为宽字符缓冲区!
但有人可以告诉我为什么会造成崩溃。
答案 0 :(得分:1)
尽量不要使用TCHAR
,如评论中所述,这可能意味着ANSI char
或UTF16 whar_t
,具体取决于是否定义了UNICODE
。除非您的目标是Windows 98,否则TCHAR
充其量是无用的。
T()
事情也可能令人困惑,它可能意味着ANSI或Unicode。而是使用L
前缀来表示Unicode字符串。
swprintf
中的第二个参数应该是缓冲区最大大小:
char ansi[128] = { 0 };
wchar_t unicode[256] = { 0 };
wchar_t unicode2[128] = { 0 };
strcpy(ansi, "how are you");
wcscpy(unicode, L" Bob?");
wcscpy(unicode2, CA2W(ansi));
wchar_t result[512];
swprintf(result, 512, L"%s %s", unicode, unicode2);