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オーバーロードされたバージョンの<<operator があるため、問題なく機能します。char

于 2012-05-02T07:39:40.667 に答える
3

argv[i]_TCHAR配列であり、のオーバーロードはありませstd::coutん。ポインターを出力するだけです。Aは、ワイド文字の MSVS 型です (Unicode を使用している場合は、おそらくそうです)。operator <<_TCHAR_TCHAR

于 2012-05-02T07:37:59.767 に答える
3

_UNICODEこれを定義済みでコンパイルしていると思います。これにより、ワイド文字に_TCHARなります。ナロー文字列を出力できます ( で示されます)。ワイド文字列を出力するには ( が指すように) を使用します。wchar_tstd::coutchar*wchar_t*std::wcout

于 2012-05-02T07:39:56.267 に答える
1

行を変更する

cout << argv[i] << endl;

wcout << argv[i] << endl;

Unicode 文字列は 2 文字幅であり、cout では処理できません。UNICODE 文字列を出力するには、cout のワイド文字バージョンが必要です。

于 2012-05-02T07:41:03.323 に答える