1

私は Visual C++ にまったく慣れていないので、これは「男子生徒」のエラーかもしれませんが、次のコードは期待どおりに実行されません。

#include "stdafx.h"
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
    if (strcmp((char*)argv[1], "--help") == 0)
    {
        printf("This is the help message."); //Won't execute
    }
    return 0;
}

という名前の実行可能ファイルは、Test.exe次のように起動されます

Test.exe --help

メッセージが表示されることを期待していましたが、表示されません。This is the help message.デバッグにより、if条件が予想どおり 0 ではなく -1 として出力されることがわかりました。私は何を間違っていますか?

4

1 に答える 1

1

OK、何が起こっているのか理解しました。argv[]配列はとして宣言されます。これは、プロジェクトでUnicodeが有効になっているかどうか(有効になっているかTCHAR*どうかに応じて)に基づいて型を調整するマクロです。私が使おうとしていた関数は、Unicode以外の文字列の比較ですが、Unicodeと同等です。この関数は、Unicode設定に応じて適切な文字列比較関数を使用します。に交換すれば、問題は解決しました!wchat_tcharstrcmpwcscmp_tcscmpstrcmp_tcscmp

#include "stdafx.h"
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
    if (_tcscmp(argv[1], _T("--help")) == 0)
    {
        printf("This is the help message."); //Will execute :)
    }
    return 0;
}

_TUnicodeが有効になっている場合、この関数は引数をUnicodeに変換します。

参照:Unicodeバージョンの文字列を比較するためにstrcmpまたは_tcscmpを使用することをお勧めしますか?

于 2012-04-23T12:05:10.403 に答える