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

aas*_*asa 0 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;
}
Run Code Online (Sandbox Code Playgroud)

当我选择_UNICODE时,输出为"D",当我选择_MBCS时,它运行良好,输出为"D:\ VCTest\c1006.exe"

为什么在_UNICODE中出错?如何为_UNICODE和_MBCS使用相同的代码?

Jam*_*lis 5

当编译一个Unicode项目,_TCHARwchar_t不是char.

%s格式说明预计其相应的参数是一个char const*; 你正在传递一个wchar_t*,这是意想不到的结果.

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

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