3

我正在使用带有以下代码的 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

4 回答 4

6

你需要使用:

std::wcout<<argv[i];

我猜你已经在编译中启用了 Unicode,当你这样做时,_TCHAR它被定义为wchar_t,因此你使用该std::wcout版本来输出宽字符字符串。

如果您没有在构建选项中启用 Unicode,那么

std::cout<<argv[i];

会工作得很好,因为 then_TCHAR被定义为char并且有一个带参数的<<运算符的重载版本。char

于 2012-05-02T07:39:40.667 回答
3

argv[i]是一个_TCHAR数组,并且std::cout没有's的重载operator <<_TCHAR它只是打印出指针。A_TCHAR是宽字符的 MSVS 类型(如果您使用的是 unicode,那么您很可能是这样)。

于 2012-05-02T07:37:59.767 回答
3

我猜你正在用_UNICODE定义编译这个。这使得_TCHARbe wchar_t,一个广泛的字符。std::cout可以输出窄字符串(如 所指char*)。要输出宽字符串(如 所指wchar_t*),请使用std::wcout.

于 2012-05-02T07:39:56.267 回答
1

换行

cout << argv[i] << endl;

wcout << argv[i] << endl;

Unicode 字符串是两个字符宽,cout 无法处理。您需要 cout 的宽字符版本来打印 UNICODE 字符串。

于 2012-05-02T07:41:03.323 回答