1

バイナリ ファイルの文字列を char ファイルと比較する際に問題があり、解決方法がわかりません (cpp の初心者です)。

dllを作成するためのこのコードがあります:

char text[5];

DLL_EXPORT char *LIMGcheck(char *archivo){
    FILE *origen = fopen(archivo, "r");
    if(origen){
        if(_fseeki64(origen, 0, SEEK_END)){
            fclose(origen);
            return "-1";
        }else{
            if(_fseeki64(origen, _ftelli64(origen)-16384, SEEK_SET)){
                fclose(origen);
                return "-1";
            }else{
                fread(text, sizeof(char), 4, origen);
                fclose(origen);
                //return text;
                if (strncmp(text, "LIMG", 3)){
                    return "1";
                }else{
                    //MessageBoxW(NULL, L"No tiene LIMG", L"AVISO:", MB_OK);
                    return "0";
                }
            }
        }
    }else{
        return "-1";
    }
}

「テキストを返す」を使用する場合 次に、プログラムは「LIMG」テキストを含む文字列を返しますが、文字列と比較しようとすると、常にfalseになります。text == "LIMG"、text == LIMGText ("LIMG" を含む char 変数)、および strncmp を試してみましたが、常に同じ結果が得られます。

前もって感謝します、多分ばかげているかもしれませんが、私はcppでは新しすぎます;)

4

1 に答える 1

2

試す

if (strncmp(text, "LIMG", 4) == 0) {

strcmp家族は注文を返します。一致する場合は 0 を返します。==内容ではなく文字列ポインタを比較するため、文字列内容の比較には使用できません。

あなたのコードも従うのが少し難しいです。すべての「else」を削除し、そのコードを最上位に配置して、エラー以外のケース全体を想定してプログラムフローを読みやすくすることを検討できます。

文字列の戻り値については、バッファ内の 5 番目の文字が常に 0 であることに依存しています。これは、ここにあるようにグローバルに初期化されたバッファである場合に当てはまりますが、一般に、後でゼロで明示的に終了するのが最も安全です。

于 2013-04-28T12:15:23.697 に答える