4

申し訳ありませんが、私は C の新人です。私がやろうとしているのは、--helpパラメータが のように端末に入力された場合に何かを出力することです./program --help。したがって、コードは次のとおりです。

char *HELP = "--help";
char *argv1 = argv[1];

if (argv1 == HELP) {
    printf("argv[1] result isaa %s\n", argv[1]);
}

そのため、 --help パラメータを使用しても if 条件を通過しません。では、その背後にある理由は何でしょうか?

4

6 に答える 6

12

これは、C で文字列を比較する方法ではありません。strcmporを使用しstrncmpます。

if (strcmp(argv1, HELP) == 0)

string.hそれらへのアクセスを取得するために含めます。

于 2012-08-23T13:34:48.973 に答える
4

つまり、コンテンツではなくアドレスを比較しています。使用strcmp():

if (0 == strcmp(HELP, argv1))
{
    printf("argv[1] result isaa %s\n", argv[1]);
}

argc > 1にアクセスする前に、必ず確認してくださいargv[1]

于 2012-08-23T13:35:06.743 に答える
3

C には文字列型はありません。を宣言しchar *HELPたので、 HELP はchar *文字列ではなく です。if では、ポインタが指す文字列ではなく、2 つのポインタを比較しています。strcmptwo を受け取り、それらが指す文字列を比較する関数 (string compare)を呼び出す必要がchar *あります。

于 2012-08-23T13:36:13.193 に答える
0

私は同じ問題を抱えていました。私の問題は、を使用して解決されstrncmpます。
strcmpとにかく私の問題ではうまくいきません

#include <string.h>


    if (strncmp(argv1, HELP,6) == 0) //6 is size of argument
    {
    //do smt
    }
于 2014-12-25T00:57:18.780 に答える
0

char *HELP = "--help";---helpこれは、テキスト セグメント内の読み取り専用データである文字列リテラルです。アドレスをポインタ変数に代入しているだけですHELP

`argv[1] は、最初のコマンドライン引数が格納されているアドレスを示します。

だからargv[1]HELPは別のアドレスを持っています。したがって、条件(argv[1] == HELP)は、これら 2 つのポインター変数に格納されているアドレスをチェックするだけです。これは必ず失敗します。

実際には、これら 2 つのピオンターの内容を比較する必要があります。このために、文字列比較ロジックを実装するか、strcmp関数を使用できます。

if (0 == strcmp(argv[1], HELP)
{
    //do your stuff
}
于 2012-08-23T13:51:09.607 に答える
0

strcmp を使用する必要があります。

result=strcmp(argv1,HELP);
if(result==0)
{
    --what you want
}
于 2012-08-23T13:37:59.070 に答える