为什么在解析 main() 参数时获取地址值



我正在使用具有以下代码的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 字符串。

相关内容

  • 没有找到相关文章

最新更新