2013-04-28 120 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