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”文本的字符串,但是当我尝试与字符串进行比较时,我得到的总是错误的。我尝试过:text == "LIMG"、text == LIMGText(包含 "LIMG" 的字符变量)和 strncmp,并且总是得到相同的结果。

在此先感谢,也许是愚蠢的,但我在 cpp 中太新了;)

4

1 回答 1

2

尝试

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

strcmp家人退货;他们返回 0 进行匹配。您不能==用于字符串内容比较,因为这将比较字符串指针而不是内容。

您的代码也有点难以理解。您可以考虑删除所有“else”并将该代码放在顶层,以便在整个过程中都没有错误情况的情况下更容易阅读程序流。

对于字符串返回,您还依赖缓冲区中的第五个字符始终为 0。如果它是一个全局初始化的缓冲区,那么这将是正确的,因为它似乎在这里,但一般来说,如果您从四个字符中复制流之后,最安全的做法是自己用零显式终止它。

于 2013-04-28T12:15:23.697 回答