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

时间:2012-05-02 07:35:06

标签: c++ command-line-arguments 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

我做错了吗?

4 个答案:

答案 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字符串。