这是我有问题的编码: 我必须接受2名球员的名字。然后,当播放器标记改变时,对于下一部分,存储在“currentPlayer”中的名称也应该改变存储在playerOne或playerTwo中的名称。它不是这样我该如何解决?请解决,我试着用&作为参考变量。符号,但我得到一个错误,说不允许引用数组。
void boardMarker(int &, char playerOne[], char playerTwo[], char &playerMarker, char currentPlayer[]);
int main()
{
char playerOne[100];
char playerTwo[100];
char currentPlayer[100] = "playername";
boardMarker(playerTurn, playerOne, playerTwo, playerMarker, currentPlayer);
}
void boardMarker(int &playerTurn, char playerOne[100], char playerTwo[100], char &playerMarker, char currentPlayer[100])
{
// Set player markers
//Player 1 uses X and Player 2 uses O
if ( playerTurn == 1 )
{
playerMarker = 'X';
currentPlayer = playerOne;
}
else
{
playerMarker = 'O';
currentPlayer = playerTwo;
}
}
答案 0 :(得分:5)
char playerOne[100]
与char* playerOne
相同char*
分配给另一个char*
不会复制字符串,而是复制指针。正确的方法:
currentPlayer = playerOne;
就是这样:
strcpy(currentPlayer, playerOne);
或者,更好的是,因为这是C ++而不是C,所以使用std::string
而不是char
数组。 std::string
的行为基本上与您的期望相符。
答案 1 :(得分:1)
您正在复制数组指针而不是其中的值。
的C教程答案 2 :(得分:1)
您希望currentPlayer
成为 指向字符的指针 ,然后在两个玩家之间进行交换:
您的代码,已编辑:
void boardMarker(int&, char playerOne[], char playerTwo[], char &playerMarker, char** pCurrentPlayer);
int main()
{
char playerOne[100];
char playerTwo[100];
char* currentPlayer = playerOne;
boardMarker(playerTurn, playerOne, playerTwo, playerMarker, ¤tPlayer);
}
void boardMarker(int &playerTurn, char playerOne[100], char playerTwo[100], char &playerMarker, char** pCurrentPlayer)
{
// Set player markers
//Player 1 uses X and Player 2 uses O
if ( playerTurn == 1 )
{
playerMarker = 'X';
*pCurrentPlayer = playerOne;
}
else
{
playerMarker = 'O';
*pCurrentPlayer = playerTwo;
}
}
对您的代码的一些评论:
playerTurn
和playerMarker
不是
声明。 (我假装他们是
全局变量,此处未显示)。int&
在boardMarker的原型中。答案 3 :(得分:0)
在C / C ++中,数组的名称实际上是指向数组第一个元素的指针。例如,
*currentPlayer == 'p'
现在,当您将数组传递给类似的函数时,您正在复制指针,而不是数组本身。
所以在你的功能中你说
currentPlayer = playerOne
你所做的只是让指针currentPlayer指向与指针playerOne相同的内存位置。
要获得所需内容,您需要使用strcpy
strcpy(currentPlayer,playerOne)