2012-11-14 2 views
0

이 내 코드입니다 : 비교했을 때을 strcmp 결과 문자열이 동일한 경우

 if(strcmp(pch,map[i].name)==0){ 
      printf("Equal\n"); 
      return 0; 
     } 

pch 파일에서 읽기, map[i].name 이것은 64보다 작은 문자열에 대한 큰 64 의 알려진 크기를 작동했다 이러한 두 가지 크기 (63)의 아래 문자열 :

file11111111111111111111111111111111111111111111111111111111111

file11111111111111111111111111111111111111111111111111111111111 

모든 복숭아하고 결과 A를 예상 s는 동일하지만 (크기 64)이 두 가지를 비교했을 때

file111111111111111111111111111111111111111111111111111111111111

file111111111111111111111111111111111111111111111111111111111111 

복귀가 거짓이다.

 if(strncmp(pch,map[i].name,64)==0){ 
      printf("Equal\n"); 
      return 0; 
     } 

을 그리고 그것은 64의 정확한 크기의 문자열 작업을 수행하지만, 은 작은 문자열 결과는 무작위 : 나는 일을 생각했다. 여기에 어떤 종류의 부끄러움이 있습니까?

편집 :

char * pch; 
    char tempFilesNeeded[100*64+100]; 
    strcpy(tempFilesNeeded,map[i].filesNeeded); 
    pch = strtok(tempFilesNeeded,","); 
    while (pch != NULL) 
    { 
     if(strcmp(pch,map[i].name)==0){ 
      printf("Equal\n"); 
      return 0; 
     } 

     pch = strtok (NULL, ","); 
    } 

답변

9

음, 마지막 항목은 종료를 위해 필요하기 때문에

char pch[64]; 

는 다음, 거기에 64 개 보이는 문자를 가질 수 있다면. 해당 배열에 "file111111111111111111111111111111111111111111111111111111111111"이 있으면 종료되지 않고 strcmp()을 호출하면 정의되지 않은 동작이 호출됩니다. 그것의 반환이 하지 부울 때문에 strcmp() 반환 "거짓"으로 잘못 말하는 작은 점으로 또한

,. 두 개의 첫 번째 다른 문자 사이의 관계를 반환합니다. 문자가 다르면 문자열이 같고 0을 반환합니다.

+0

char * pch입니다. 내 편집을 보시기 바랍니다 – Tom

+0

@Tom "map [i] .name은 알려진 크기가 64입니다."그래서 그는 여전히 점수를 보유하고 있습니다. – xiaoyi

+0

@Tom 64 문자 길이의 문자열에 64 문자 길이의 문자열을 넣을 수 없습니다. – xiaoyi

5

하나 또는 둘 모두 당신의 배열 (64)의 정확한 크기가있는 경우, 당신은이 마지막 '\ 0'문자열을 종료 누락이 전체 코드입니다.

관련 문제