我正在使用具有以下代码的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
我做错了什么吗?
您需要使用:
std::wcout<<argv[i];
我猜您已经在编译中启用了 Unicode,当您这样做时,_TCHAR
被定义为wchar_t
,因此您使用 std::wcout
版本输出宽字符字符串。
如果您在构建选项中没有启用 Unicode,则
std::cout<<argv[i];
工作得很好,因为这样_TCHAR
被定义为char
,并且有一个重载版本的<<
运算符,它接受一个char
参数。
我猜你是在用_UNICODE
定义的来编译它。这使得_TCHAR
wchar_t
,一个广泛的角色。 std::cout
可以输出窄字符串(如char*
所示)。要输出宽字符串(如 wchar_t*
所示),请使用 std::wcout
。
argv[i]
是一个_TCHAR
数组,std::cout
没有_TCHAR
的重载operator <<
。它只是打印出指针。_TCHAR
是宽字符的 MSVS 类型(如果您使用的是 unicode,则很可能是 unicode)。
更改行
cout << argv[i] << endl;
自
wcout << argv[i] << endl;
Unicode 字符串是两个字符宽的,不能由 cout 处理。您需要 cout 的宽字符版本来打印 UNICODE 字符串。