为什么输出argv [0]错了?

时间:2012-10-06 02:33:46

标签: c visual-c++

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

1 个答案:

答案 0 :(得分:5)

编译Unicode项目时,_TCHARwchar_t,而不是char

%s格式说明符期望其对应的参数为char const*;你正在传递一个wchar_t*,这是意想不到的结果。

您可以使用_tprintf,根据项目是构建为ANSI还是Unicode,选择正确的printf函数(printfwprintf)。如果要使用printf,可以对宽字符串使用%ls格式说明符,但是根据项目是构建为ANSI还是Unicode,必须使用不同的格式字符串。

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