0

重複の可能性:
「if」ステートメントで文字列を比較する方法は?

私は C を使用しています。2 つの文字列を equals == 演算子と比較すると、std 出力が同じように見えても一致しません。

整数の配列として開始された配列の 1 つを考えてみましょう。これを、各整数に「0」を追加して別の char * 配列にロードすることで文字に変換しました。

したがって、両方の配列は文字と同じ標準出力を含む文字配列ですが、「if」選択構造はそれらに一致するように機能していません。各配列を参照するために char * 名を使用しています。

必要に応じて、このコード全体を投稿できます。比較を含むループは次のとおりです。

i=0;
pipx = (char*)malloc(sizeof(char));
sec = (char*)malloc(sizeof(char));

//for (b = 0; b < lengthx; b++){
    //reallocate a second array
    pipx = (char*)realloc(sec, ((i+1)*sizeof(char)) );
    sec = pipx;
    //add bitstr[b] to second array
    sec[i] = (char)bitstr[b] + '0';
    i++;

    for (m = 0; m < k; m++){
        printf("codex[m].bitx:%s", codex[m].bitx);
        printf("sec:%s|\n", sec);
        printf("seclen: %i", (int)strlen(sec));
        printf("codex[m].bitxlen: %i\n", (int)strlen(codex[m].bitx));
        if ((char*)sec == (char*)codex[m].bitx){
            printf("This should output: %s", sec);
            printf("Here ---------------------- Here");
            //allocate the second array to zero
            i=0;
            sec = (char*)malloc(0);
        }
    }
}
4

3 に答える 3

4

文字列を比較するには、strcmp代わりに使用する必要があります==

==それらが同じアドレスを指していることを確認しstrcmp、2 つの char* を比較し、ヒットするまですべての文字が一致する場合は true を返します\0

于 2012-09-26T01:47:49.860 に答える
1

これは、2 つのメモリ アドレスの情報が同じかどうかではなく、2 つの変数が同じメモリ アドレスを指しているかどうかを比較するためです。常に strcmp を使用する

于 2012-09-26T01:48:56.787 に答える
0

ポインターが指す文字列ではなく、リテラル ポインター値を比較しています。

他の人が言ったように、ルックアップstrcmp()と友達。

于 2012-09-26T01:49:06.920 に答える