我正在使用Visual C ++,代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
for (int i = 0; i < argc; ++i)
{
cout << argv[i] << endl;
}
getch();
return 0;
}
名为MyProgram.exe
的程序。
然后我运行程序:MyProgram.exe hello world
该程序应打印出来:
MyProgram.exe
hello
world
但它没有,它打印了3行地址值:
005D1170
005D118C
005D1198
我做错了吗?
答案 0 :(得分:6)
您需要使用:
std::wcout<<argv[i];
我猜您已在编译中启用了Unicode,当您这样做时,_TCHAR
被定义为wchar_t
,因此您使用std::wcout
版本输出宽字符串。
如果您没有在构建选项中启用Unicode,那么
std::cout<<argv[i];
可以正常运行,因为_TCHAR
被定义为char
并且<<
运算符的重载版本带有char
参数。
答案 1 :(得分:3)
argv[i]
是一个_TCHAR
数组,std::cout
没有operator <<
的重载_TCHAR
。它只是打印出指针。 _TCHAR
是宽字符的MSVS类型(如果您使用的是unicode,则很可能是这样)。
答案 2 :(得分:3)
我猜你正在用_UNICODE
定义来编译它。这使得_TCHAR
成为wchar_t
,这是一个广泛的角色。 std::cout
可以输出窄字符串(由char*
指出)。要输出宽字符串(由wchar_t*
指出),请使用std::wcout
。
答案 3 :(得分:1)
更改行
cout << argv[i] << endl;
到
wcout << argv[i] << endl;
Unicode字符串是两个字符宽,cout无法处理。您需要cout的宽字符版本才能打印UNICODE字符串。