我使用的是Visual C ++ 2010,代码是:
#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[]) {
printf("step 0: %s\n", argv[0]);
int d;
scanf("%d",&d);
return 0;
}
当我选择_UNICODE时,输出为“D”, 当我选择_MBCS时,效果很好,输出为“D:\ VCTest \ c1006.exe”
为什么_UNICODE出错了? 如何为_UNICODE和_MBCS使用相同的代码?
答案 0 :(得分:5)
编译Unicode项目时,_TCHAR
为wchar_t
,而不是char
。
%s
格式说明符期望其对应的参数为char const*
;你正在传递一个wchar_t*
,这是意想不到的结果。
您可以使用_tprintf
,根据项目是构建为ANSI还是Unicode,选择正确的printf
函数(printf
或wprintf
)。如果要使用printf
,可以对宽字符串使用%ls
格式说明符,但是根据项目是构建为ANSI还是Unicode,必须使用不同的格式字符串。
或者,只使用Unicode,不要使用_TCHAR
和朋友。