2013-04-28 119 views
1

我有一个问题来比较二进制文件与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太新)

+1

如果匹配,'strncmp'返回0。如果代码是'(0 == strncmp(text,“LIMG”,3))'? – suspectus 2013-04-28 12:15:53

回答

2

尝试

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

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

你的代码也有点难以遵循。您可以考虑删除所有其他的代码,并将该代码放在顶层,以便更容易阅读程序流程,假设整个过程都是非错误的情况。

对于字符串返回,您还依赖于缓冲区中的第五个字符始终为0.如果它是全局初始化的缓冲区,这似乎是真的,但通常情况下,如果您要复制这个流中的四个字符是最安全的,然后用零自己明确地终止它。

+0

就像我想的那样,简单但我不知道。 谢谢! – 2013-04-28 12:23:13