2012-11-14 54 views
0

這是我的代碼:STRCMP結果時字符串相等

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

pch被從文件中讀取,map[i].name有64 已知大小這個偉大的工程的字符串長度超過64小時比較這兩個字符串以下尺寸63:

file11111111111111111111111111111111111111111111111111111111111

file11111111111111111111111111111111111111111111111111111111111 

一切是桃色和結果š預期是相等的,但是當這兩個(尺寸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()返回「false」是錯誤的,因爲它的返回值是而不是布爾值。它返回兩個第一個不同字符之間的關係;如果沒有字符不同的字符串是相等的,那麼它返回零。

+0

它是char * pch。請查看我的編輯 – Tom

+0

@Tom「map [i] .name已知大小爲64」,所以他的觀點仍然存在。 – xiaoyi

+0

@Tom你不能把64字符長度的字符串放在64長度的字符數組中。 – xiaoyi

5

如果一個或兩個您的陣列具有64的確切尺寸,你錯過了最後的「\ 0」結尾的字符串。