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

时间:2013-07-26 20:30:42

标签: c++ char arrays

我正在尝试为类快速制作TicTacToe游戏,并且遇到了我为X和O创建的两个字符的问题。我们必须使用一些代码进行分配,所以我不能只是标准数组。每当我把它们放入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;

所以如果我在棋盘上为player1选择2,它会打印:
1 | XO | 3

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

如果我添加第3个字符:

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

然后打印下面的内容:
1 | XOT | 3
1 | XOT | OT

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

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

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

答案 1 :(得分:1)

致电时

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;