向char*[]添加字符时出现问题

Trouble with adding chars to char*[]

本文关键字:问题 字符 添加 char      更新时间:2023-10-16

我正在尝试为class制作一个快速的TicTacToe游戏,但我为X和O创建的两个字符有问题。有些代码必须用于赋值,所以我不能只有一个标准数组。每次我把它们放进char*[]中时,它们都会显示出在它们之后创建的任何char。

以下是我正在使用的部分代码。

char *spots[] = {"1","2","3","4","5","6","7","8","9"};
char player1 = 'X';
char player2 = 'O';

要打印板的第一行,我们需要使用以下类别:

cout << spots[0] << " | " << spots[1] << " | " << spots[2] << endl;

它打印1|2|3

以下是我如何将值分配给数组:

spots[1]= &player1;

因此,如果我在板上选择2作为player1,它将打印:
1|XO|3

然后我选择3作为player2:
1|XO|O

如果我添加第三个字符:

char player1 = 'X';
char player2 = 'O';
char test = 'T';

然后打印以下内容:
1|XOT|3
1|xod|OT

我觉得这与字符位置有关,但我无法修复它。

您可以使用:

char *spots[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
char *player1 = "X";
char *player2 = "O";

然后分配:

spots[i] = player1;

类型是一致的:spotschar *的数组,将char *字符串分配给数组中的一个条目是有意义的——它是指向所分配的以null结尾的字符串的指针,与spots中的其他值相同。

您可能需要考虑:

char *player[] = { "?", "X", "O" };

然后你可以使用:

spots[i] = player[j];

当然,"?"允许您为玩家使用编码12

使用您的代码,您将单个字符(而不是字符串)的地址分配给点,然后打印代码读取,直到找到null,从而导致混乱。

当您调用时

std::cout << spots[1] 

您正在打印一个null终止的字符串。

通过进行

spots[1]= &player1;

您没有显式设置null终止符,因为player1属于char类型。

你应该做以下

char const* spots [] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
char const* player1 = "X";
char const* player2 = "O";
spots[1] = player1;