2

する

if(strncmp(buf, buf2, 7) == 0)

と同じことをする

if(memcmp(buf, buf2, 7) == 0)

bufおよびbuf2char* 配列または類似のものです。

これを別の質問に追加するつもりでしたが、おそらく別々に投稿する方がよいと判断しました. おそらく、答えは些細な「はい」であるか、そうでない場合、違いは何ですか?

(これらの関数はオンライン ドキュメントから見つけましたがstrncmp、ドキュメントが少し不明瞭だったのでわかりませんでした。)

4

3 に答える 3

2

strncmp()との主な違いmemcmp()は、最初のものは( で止まる)に対し、最新のものはそうではないということです。と のメモリの最初の 7 バイトにa が含まれていない場合、動作は同じです。'\0'bufbuf2'\0'

次の例を検討してください。

#include <stdio.h>
#include <string.h>

int main(void) {
    char buf[]  = "123\0 12";
    char buf2[] = "123\0 34";

    printf("strncmp(): %d\n", strncmp(buf, buf2, 7));
    printf("memcmp(): %d\n", memcmp(buf, buf2, 7));

    return 0;
}

次のように出力されます。

strncmp(): 0
memcmp(): -2

strncmp()は で停止するためbuf[3]、7 バイトすべてが比較されるまで続きます'\0'memcmp()

于 2016-07-31T19:36:21.340 に答える
2

C および C++ では、文字列の末尾は値 0 のバイトで示されます。関数は文字列の末尾memcmpを気にしませんが、指定されたバイト数を正確に比較します。

それとは対照的にstrncmp、渡された比較対象のバイト数にまだ達していなくても、関数は値 0 のバイトで停止します。

于 2016-07-31T19:31:24.220 に答える