【发布时间】:2014-10-04 15:54:32
【问题描述】:
我写了以下函数:
typedef enum {GREEN,BLACK, WHITE} color;
void StartGame(Piece board[8][8])
{
color currentPlayer=WHITE;
char location[2];
int gameover=1;
while(gameover)
{
printf("%d\n",currentPlayer);
if(currentPlayer==WHITE)
printf(BOLDWHITE"White: Please select a piece:\n");
else
printf(BOLDBLACK"Black: Please select a piece:\n");
printf("%d\n",currentPlayer);
scanf("%s",location);
printf("%d\n",currentPlayer);
if(currentPlayer==WHITE)
currentPlayer=BLACK;
else
currentPlayer=WHITE;
}
}
我在任何级别打印currentPlayer 以查看发生了什么 -> 在这里我得到了什么:
2
White: Please select a piece:
2
a1
0
2
White: Please select a piece:
2
为什么scanf后面的当前玩家为0?我没碰过。
【问题讨论】:
-
您将一个 3 字节的位置(
"a1",其中包括一个空字节)读入一个 2 字节的内存块。这是堆栈溢出。 -
另外,一定要检查
scanf的返回值,否则你一定会遇到难以复制的神秘错误。