0

我正在使用 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 使用相同的代码?

4

1 回答 1

5

编译 Unicode 项目时,_TCHARis wchar_t, not char.

%s格式说明符期望其对应的参数是a char const*; 您正在传递 a wchar_t*,因此结果出乎意料。

您可以使用_tprintf, 它将根据项目是构建为 ANSI 还是 Unicode来选择正确的printf函数(printf或)。wprintf如果你想使用printf,你可以%ls对宽字符串使用格式说明符,但是你必须使用不同的格式字符串,具体取决于项目是构建为 ANSI 还是 Unicode。

或者,只使用 Unicode,根本不使用_TCHAR和朋友。

于 2012-10-06T02:39:02.203 回答