比较二进制字符串与字符串VC++
问题描述:
我有一个问题来比较二进制文件与char文件的字符串,我不知道如何解决(我很新的cpp)。比较二进制字符串与字符串VC++
我有这个代码,以使一个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错误。我尝试过:text ==“LIMG”,text == LIMGText(包含“LIMG”的char变量)和strncmp,并且总是得到相同的结果。提前
谢谢,也许是一个愚蠢,但即时通讯在CPP太新)
答
尝试
if (strncmp(text, "LIMG", 4) == 0) {
的strcmp
家人返回的排序;他们返回0进行比赛。您不能使用==
进行字符串内容比较,因为它会比较字符串指针而不是内容。
你的代码也有点难以遵循。您可以考虑删除所有其他的代码,并将该代码放在顶层,以便更容易阅读程序流程,假设整个过程都是非错误的情况。
对于字符串返回,您还依赖于缓冲区中的第五个字符始终为0.如果它是全局初始化的缓冲区,这似乎是真的,但通常情况下,如果您要复制这个流中的四个字符是最安全的,然后用零自己明确地终止它。
+0
就像我想的那样,简单但我不知道。 谢谢! – 2013-04-28 12:23:13
如果匹配,'strncmp'返回0。如果代码是'(0 == strncmp(text,“LIMG”,3))'? – suspectus 2013-04-28 12:15:53