比较二进制字符串和vc++字符串



我有一个问题,从二进制文件与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";
    }
}

如果我使用"return text;",那么程序返回一个带有"LIMG"文本的字符串,但是当我尝试与字符串进行比较时,我总是得到false。我尝试过:text == "LIMG", text == LIMGText(包含"LIMG"的字符变量)和strncmp,并且总是得到相同的结果。

提前感谢,也许是愚蠢的,但我对cpp太陌生了;)

Try

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

strcmp族返回一个排序;如果匹配,它们返回0。你不能使用==进行字符串内容比较,因为它将比较字符串指针而不是内容。

你的代码也有点难以理解。你可以考虑删除所有的else语句,并将这些代码放在顶层,这样在假设整个过程中都没有错误的情况下,更容易阅读程序流。

对于字符串返回,您还依赖于缓冲区中的第五个字符始终为0。如果它是一个全局初始化的缓冲区,就像这里一样,这将是正确的,但一般来说,如果你从流中复制四个字符,那么最安全的做法是自己显式地以零结束它。

最新更新