2017-04-16 99 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

不提供代码解答。你应该解释你改变了什么以及你为什么做了这些改变。 –