为什么argv[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; } #包括“stdafx.h” #包括 inttmain(intargc,TCHAR*argv[]){ printf(“步骤0:%s\n”,argv[0]); int d; scanf(“%d”、&d); 返回0; }

为什么argv[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; } #包括“stdafx.h” #包括 inttmain(intargc,TCHAR*argv[]){ printf(“步骤0:%s\n”,argv[0]); int d; scanf(“%d”、&d); 返回0; },c,visual-c++,C,Visual C++,当我选择_UNICODE时,输出为“D”, 当我选择_MBCS时,它运行良好,输出为“D:\VCTest\c1006.exe” 为什么UNICODE是错误的? 如何对UNICODE和MBCS使用相同的代码?编译UNICODE项目时,\u TCHAR是wchar\t,而不是char %s格式说明符要求其相应的参数为字符常量*;您正在传递一个wchar\u t*,因此出现了意外的结果 您可以使用\u tprintf,它将根据项目是以ANSI还是Unicode构建来选择正确的printf函数(prin

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

为什么UNICODE是错误的?
如何对UNICODE和MBCS使用相同的代码?

编译UNICODE项目时,
\u TCHAR
wchar\t
,而不是
char

%s
格式说明符要求其相应的参数为
字符常量*
;您正在传递一个
wchar\u t*
,因此出现了意外的结果

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


或者,只使用Unicode,不要使用
\u TCHAR
和朋友。

编译Unicode项目时,
\u TCHAR
wchar\u t
,而不是
char

%s
格式说明符要求其相应的参数为
字符常量*
;您正在传递一个
wchar\u t*
,因此出现了意外的结果

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


或者,只使用Unicode,而不要使用TCHAR和friends;详细说明?@sreservor:看,不过这只是VS2005,很难理解你在问什么;详细说明?@sreservor:看,不过这只是VS2005,非常感谢,我使用了_tprintf(_T(“步骤0:%s\n”),argv[0]);非常感谢,我使用了_tprintf(_T(“步骤0:%s\n”)、argv[0]);而且效果很好。