0

簡単なことをしたい:パラメータが何であるかを確認してください。

void _tmain(int argc, WCHAR *argv[])
{



if(argv[4] == "-h");
{

        //do stuff
}


}

WCHAR * から const char * への互換性のないエラーが発生します。

このような変換に関する質問が寄せられましたが、私が見つけた答えは多く、単純ではありません。私は C++ の初心者です。

私が探しているのは、いくつかの複雑な関数へのポインターではなく、プログラムを機能させるためにプログラムに入れる実際のコードです。

シンプルでわかりやすいコードを探しているだけです。ありがとう!

4

4 に答える 4

1

ここには 2 つの問題があります。

  1. 「へのポインタchar」を文字列オブジェクトの論理概念と混同する。C (および C++) では、char( char*) へのポインターは、慣例により C スタイルの文字列にすぎません。つまり、ヌル終端 ( \0) し、適切なライブラリ メソッドを使用する場合です。へのポインターcharは実際の文字列型ではないため、論理的な等価性ではなくポインターの等価性を実行しています。

  2. ワイド文字 ( L"A") とナロー文字 ( ) を混同し"A"ます。これらは 2 つの異なる概念であり、役に立たない可能性があります。

Unicode エントリ ポイントを捨てることをお勧めします。

/* do you really want C or C++? */
int main(int argc, char **argv)
{
    /* now we're "narrow" characters, which will be more natural for you */

テストを改善する (またはgetoptを使用する):

    if (0 == strcmp(argv[4], "-h"))
    {
        /* argv[4] is equal to "-h" */

本当に C++ が必要な場合はstd::string、古い C スタイルの文字列の代わりに使用する必要があります。

于 2013-03-01T18:08:21.877 に答える
0
#include <string.h>
void _tmain(int argc, WCHAR *argv[])
{



   if( 0 == wcscmp(argv[4], L"-h") )
   {

        //do stuff
   }


}

それはそれを行う必要があります。

于 2013-03-01T18:06:08.367 に答える
0

文字配列へのポインターを比較して ( または に関係なく)、それらの内容 (これらがメモリ内で指しているもの) が等しいかどうWCHAR*かを確認することはできません。char*

あなたはs.thを試すことができます。このような:

if(std::wstring(argv[4]) == std::wstring(L"-h")) 
{
    // ...
}
于 2013-03-01T18:09:05.257 に答える
0

これを試して:

#include <string>


void _tmain(int argc, WCHAR *argv[])
{
    typedef std::basic_string<WCHAR> string_type;
    static const string_type help( TEXT("-h") );

    if(argv[4] == help);
    {
        //do stuff
    }
...
}

TEXT マクロはまだ存在していると思います。Windows C++ プログラミングを何年も行っていません。

また、-hは「ヘルプ」を表すと思います:)

于 2013-03-01T17:59:47.597 に答える