在尝试使用Xcode编写Tic Tac Toe游戏来练习C ++时,我遇到了各种各样的问题,我已经解决了这个问题,但是我仍然无法理解为什么会出现以下错误以及如何正确修复它们/避免它们。
问题1:
我已经链接了curses库,但我仍然收到此错误:从字符串文字转换为'char *'已弃用。
#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
int result;
setupterm( NULL, STDOUT_FILENO, &result );
if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}
问题2:
我一直收到未使用的实体问题(表达式结果未使用)。
(gridBox是char类型的二维数组,player也是char类型,两个全局变量。)
if (gridBox[0,0] == gridBox[1,0] && gridBox[1,0] == gridBox[2,0]) {
if (player == 'X') {
return 'X';
}
if (player == 'O') {
return 'O';
}
}
问题3: 当我尝试将最后一个问题中的if语句更改为...时
if (gridBox[0,0] == 'X' && gridBox[1,0] == 'X' && gridBox[2,0] == 'X') {
return 'X';
}
我收到此错误:指针和整数之间的比较('char *'和'int')。
这让我完全疯了,请帮忙。
提前谢谢大家!
答案 0 :(得分:0)
就是这样:从字符串文字(例如"clear"
)隐式转换为指向非常量字符char*
的指针,过去由于历史原因而被允许但已被允许因为它非常不安全而被弃用
当与C库或旧代码连接时,这可能会导致一些问题,但通常很容易解决。
将其替换为非const数组:
char clear[] = "clear";
putp(tigetstr(clear));
是由索引错误的方式引起的; 2-D数组是一个数组数组,它的索引如下:
gridBox[0][0]
如果要按顺序评估两个表达式并丢弃第一个表达式的结果,则在某些上下文中使用逗号运算符 - a, b
返回b
的值,因此gridBox[0,0]
相当于gridBox[0]
。
它在实践中非常罕见 - 编辑器开始发出警告非常罕见,因为它几乎不是你想要的。
由于gridBox
是char
的数组数组,因为第2点,gridBox[0,0]
相当于gridBox[0]
,gridBox[0]
是一个char数组
您无法将数组与==
进行比较。相反,它们被隐式转换为指向数组的第一个元素的指针,然后将其用于比较。
因此,左侧是char*
,右侧被提升为int
以进行比较,而这两者无法进行比较。
如果您修复索引问题,此问题将同时消失。