在swprintf中使用两个以上的宽字符会导致崩溃?

时间:2016-01-22 10:13:06

标签: c++ visual-studio atl

以下代码导致崩溃

“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'作为宽字符缓冲区!

但有人可以告诉我为什么会造成崩溃。

1 个答案:

答案 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);