0

次のコードを考えてみましょう: mingw 64 で実行し、d->box が "jp2" に等しい場合、br も "jp2" に等しくなります。つまり、null で終了します。したがって、strcmp は成功し、0 を返します。

Visual Studio 2012 では、scrncpy は null で終了する文字列を返しません。

この場合、strcmp は失敗します。しかし、strcmp docs によると:

/////////////////////////////////////////////// /////////////////////

strcmp 2 つの文字列を比較 C 文字列 str1 を C 文字列 str2 と比較します。

この関数は、各文字列の最初の文字の比較を開始します。それらが互いに等しい場合、文字が異なるか、終端のヌル文字に到達するまで、次のペアで続行します。

/////////////////////////////////////////////// ///////////////////////

そのため、1 つの文字列が null で終了し、1 つの文字列がそうでなくても、strcmp は成功するはずです。

これがなぜなのかについてのアイデアはありますか?

    char *br = (char*)malloc(5 * sizeof(char));
br = strncpy(br, (const char*)b->dbox, 4);

if(strcmp(br, "jp2\040")) {
    println(INFO, "DOSEN'T Conform to IS 15444-1. Exiting");
    return 1;
} else
    println(INFO, "Conforms to IS 15444-1");
4

1 に答える 1