質問

C プログラムで文字列と LPCTSTR を比較しようとしています。

これまでに私がやったことは次のとおりです(コードは問題のある部分のみに簡略化されています)。

DWORD main(DWORD ac, LPCTSTR *av)
{
    DWORD cpt = 1;

    while (++i < ac)
    {
        if (strcmp(av[i], "value"))
            printf("1 : OK\n");
        else if (strcmp(av[i], _T("value")))
            printf("2 : OK\n");
        else if (strcmp(av[i], (LPCTSTR)"value"))
            printf("3 : OK\n");
    }
    return EXIT_SUCCESS;
}

最初のパラメータ「value」を指定してプログラムを実行すると、 if が検証されています。で試してみました strcmp そして lstrcmp しかし結果は同じです。

誰かが私が間違っていることを教えてくれませんか?

ありがとう。

役に立ちましたか?

解決

strcmp そして家族の帰還 0 文字列が等しいことを示します。あなたの論理は単純に間違っています。

次のようにテストを作成する必要があります。

if (strcmp(av[i], "value")==0)

余談ですが、他の二人は if ステートメント、比較する _T("value") そして (LPTSTR)"value" ANSI 用にコンパイルする場合は問題ありませんが、Unicode 用にコンパイルする場合は正しくありません。Unicode 用にコンパイルする場合、 _T("value") ワイド文字列として評価されるため、有効な引数にはなりません。 strcmp. 。それはコンパイルエラーです。そして (LPTSTR)"value" コンパイルエラーにもなりますので、 LPTSTR ワイド文字列になります。しかし、キャストも完全にインチキでしょう。とにかく、私は完全を期すためにこれらの問題について言及しているだけですが、根本的な問題をデバッグしようとしている間にこれらの余分な if ステートメントが追加されたことは理解しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top