2016-01-22 26 views
-1

下面这段代码导致系统崩溃在swprintf中使用两个以上的宽字符会导致崩溃?

“在0x01C006AB未处理异常ASMaplePro.exe:0000005:访问冲突读取位置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); 

我怀疑它,因为我同时使用“文本'和'列表',它们一次性用作宽字符缓冲区!

但有人能告诉我为什么崩溃是造成的。

+0

此代码甚至不进行编译,更不用说导致崩溃。 –

+1

这段代码是否可以编译? 'strcpy'采用'const char *','wcscpy'采用'const wchar_t *'和'_T'转换为其中一个。不是都。 –

+0

到处都有错误。我也得到错误,_T和CA2W未定义,但我包括windows.h。 – Archimaredes

回答

1

尽量不要使用TCHAR,在评论中提及,这可能意味着无论是ANSI char或UTF16 whar_t,取决于羯羊或不UNICODE定义。 TCHAR最好没用,除非你的目标是Windows 98.

T()这个东西可能会令人困惑,它也可能意味着ANSI或Unicode。而是使用Unicode字符串的前缀L

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); 
+0

是否必须复制ansi-x-unicode2然后使用它?使用swprintf有什么问题(结果512,L“%s%s”,unicode,(CA2W)ansi);? – abejoe

+0

将东西粘在一个函数中会使调试更加困难,但我想如果您愿意,可以使用它。 –

+0

所以现在我的表述就像swprintf(result,512,L“%s%s”,(CA2W)ansi,unicode);但是只有ansi中的字符才会被附加到结果中。 unicode中的字符不会被追加到结果中。 – abejoe

相关问题