0

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検証されていないように見えます。試してみましstrcmplstrcmpが、結果は同じです。

誰かが私が間違っていることを教えてもらえますか?

ありがとう。

4

1 に答える 1

3

strcmpとファミリ0は、文字列が等しいことを示すために戻ります。あなたの論理は単に間違った方法です。

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

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

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

于 2012-03-09T12:32:25.860 に答える