2017-04-16 98 views
-2

我將兩個2d字符數組傳遞給函數,如果數組相等則返回1,否則返回0。 數組的大小是[4] [4],但是當我嘗試遍歷數組時,我得到一個錯誤。如何在C/C++中比較兩個2d char字符數組

int checkIfWin(char** array, char** array2){ 

int winner = 0; 

for(int i = 0; i < 4; i++){ 

    if(strcmp(array2[i], array[i])==0){ 
     winner = 1; 
    } 
    else 
     winner = 0; 

} 
return winner; 

} 

UPDATE:

爲什麼我得到了一個errorn而STRCMP是因爲我沒有malloc的第二二維數組的原因。

+0

的簡單解決方案是使用兩個for循環(一個嵌套在另一個)。 – carefulnow1

+0

@Maciej Girek用戶贏得了多少?請澄清你想要的。 –

+1

詳細信息:將_not_中的代碼傳遞給'checkIfWin(char ** array,...)'。它傳遞一個指向指針的指針,也不顯示調用代碼。如果調用代碼是'char a [4] [4]; ... checkIfWin(a,...);'有一個類型不匹配。發佈調用代碼。 – chux

回答

2

char[]char *不同,第一次將值放在數組的末尾,而第二次不放。

功能STRCMP將比較元素,直到它找到值'\0',該任務更好地比較元素元素,如果你找到一個差異自動返回。

int checkIfWin(char** array, char** array2){ 
    for(int i = 0; i < 4; ++i){ 
     for (int j = 0; j < 4; ++j){ 
      if(array2[i][j] != array[i][j]){ 
       return 0; 
      } 
     } 
    } 
    return 1; 
} 
+0

在這種情況下,我非常確定用戶想要匹配數組之間的匹配,而不是通過第二個數組循環通過第一個獲勝者。 –

+2

請讓用戶確定 – eyllanesc

+1

這個break語句只會跳出內部循環。如果冠軍= 0,你也想跳出外部循環。 –

-1

這裏是一個使用溶液STRNCMP():

int winner = 1, i; 

    for(i = 0; i < 4; i++){ 

     if((strncmp(array2[i], array[i], 4)) != 0){ 
     winner = 0; 
     break; 
     } 
    } 

return winner; 
+0

有人可以向我解釋爲什麼這個解決方案是一個不好的解決方案嗎? –

+0

不提供代碼解答。你應該解釋你改變了什麼以及你爲什麼做了這些改變。 –