有人可以向我解释如何正确使用strcmp
功能吗?我正在创建一个井字游戏,我不断收到错误:
passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
我创建了两个指针作为strcmp
函数的参数。一个是玩家输入的输入,第二个是玩家拥有的移动选择。但是,当我尝试运行代码时,我得到上面的错误。下面是我的一段代码:
void mark_location(int userU, char str) {
char *moves[] = {"upperLeft", "up", "upperRight", "left", "center", "right", "lowerLeft", "down", "lowerRight"};
if (strcmp(str, moves[0]) == 0)
board[0][0] = userU;
else if (strcmp(str, moves[1]) == 0)
board[0][1] = userU;
else if (strcmp(str, moves[2]) == 0)
board[0][2] = userU;
else if (strcmp(str, moves[3]) == 0)
board[1][0] = userU;
else if (strcmp(str, moves[4]) == 0)
board[1][1] = userU;
else if (strcmp(str, moves[5]) == 0)
board[1][2] = userU;
else if (strcmp(str, moves[6]) == 0)
board[2][0] = userU;
else if (strcmp(str, moves[7]) == 0)
board[2][1] = userU;
else if (strcmp(str, moves[8]) == 0)
board [2][2] = userU;
}
答案 0 :(得分:4)
正如其他人已经指出的那样,第二个参数应该是char*
类型,而不是char
。
我只想提一下if
语句系列可以重写为for
循环:
void mark_location(int userU, char* str) {
char *moves[] = {"upperLeft", "up", "upperRight", "left", "center", "right", "lowerLeft", "down", "lowerRight"};
int i;
for (i = 0; i < 9; i++) {
if (strcmp(str, moves[i]) == 0) {
board[i / 3][i % 3] = userU;
break;
}
}
}
每次调用函数时重新初始化moves
以及str
的无效值是否应该引发错误也是值得考虑的。
答案 1 :(得分:3)
将您的函数声明更改为以下内容:
void mark_location(int userU, char *str) {
请注意从char
(单个字符)到char *
(字符串)的更改。
另外,请确保您已将string.h
添加到文件顶部:
#include <string.h>
答案 2 :(得分:1)
在函数参数中,您已将“str”声明为“char”。它应该是“char *”。
答案 3 :(得分:1)
strcmp
需要一个指向字符数组的指针,但str
被声明为单个字符,应该是char*
。
答案 4 :(得分:0)
尝试这样做:
for (i = 0; i < 9; i++) {
if (!strcmp(*str, *moves[i]) ) {
board[i / 3][i % 3] = userU;
break;
}
}
节省打字工作的另一件事是:
当字符串匹配时, strcmp()
返回0,因此在控制语句中写入时更喜欢写
if(!strcmp(hello, world)){/* do this do that*/}.....1
而不是写
if(strcmp(hello, world)==0){/* do this do that*/}......2
在第一个等式中if语句执行任何strcmp
返回的NOT,所以如果字符串相等,你将得到0而NOT 0是1
这样可以节省大量的时间输入。