2013-04-28 2 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 false가됩니다. 나는 시도했다 : text == "LIMG", text == LIMGText ("LIMG"를 포함하는 char 변수), strncmp 그리고 항상 같은 결과를 얻는다.

+1

'strncmp'는 일치하는 것이 있으면 0을 반환합니다. 코드는'(0 == strncmp (text, "LIMG", 3))'이어야합니까? – suspectus

답변

2

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

strcmp 가족이 순서를 돌아보십시오)

감사 사전에, 어쩌면 어리 석음하지만 CPP 너무 새로운 메신저이다; 그들은 매치를 위해 0을 리턴한다. 내용이 아닌 문자열 포인터를 비교하므로 문자열 내용 비교에 ==을 사용할 수 없습니다.

코드도 약간 따라하기가 어렵습니다. 당신은 모든 'else'를 제거하고 최상위 레벨에 코드를 두는 것이 좋습니다. 그러면 오류가없는 경우를 전제로 프로그램 흐름을 더 쉽게 읽을 수 있습니다.

문자열 반환의 경우 버퍼의 5 번째 문자가 항상 0으로 유지됩니다. 전역 적으로 초기화 된 버퍼 인 경우 여기에 표시되는 것처럼 적용되지만 일반적으로 복사하는 경우 스트림에서 네 문자가 나오면 나중에 0으로 명시 적으로 종료하는 것이 가장 안전합니다.

+0

내가 생각했던 것처럼, 단순하지만 뭔가 알지 못했습니다. 감사합니다 !!! –