我使用的是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使用相同的代码?
当编译一个Unicode项目,_TCHAR是wchar_t不是char.
该%s格式说明预计其相应的参数是一个char const*; 你正在传递一个wchar_t*,这是意想不到的结果.
您可以使用_tprintf,它将根据项目是构建为ANSI还是Unicode 来选择正确的printf函数(printf或wprintf).如果要使用printf,可以使用%ls宽字符串的格式说明符,但是必须使用不同的格式字符串,具体取决于项目是构建为ANSI还是Unicode.
或者,只使用Unicode,根本不使用_TCHAR和朋友.
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |