次のコードを考えてみましょう: 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");