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

时间:2013-04-28 12:11:17

标签: visual-c++

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

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

1 个答案:

答案 0 :(得分:2)

尝试

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

strcmp家庭返回订单;他们为比赛返回0。您不能使用==进行字符串内容比较,因为它会比较字符串指针而不是内容。

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

对于字符串返回,你也依赖于缓冲区中的第五个字符始终为0.如果它是一个全局初始化的缓冲区,它将是真的,因为它似乎在这里,但一般来说,如果你要复制四个来自流的字符最安全的是自己用零来自己明确地终止它。