intarr_result_t intarr_set( intarr_t* ia,
unsigned int index,
int val )
{
if( ia[index] != NULL )
{
index = val;
return INTARR_OK;
}
else if (ia[index] == NULL)
{
return INTARR_BADARRAY;
}
else
{
return INTARR_BADINDEX;
}
}
如果索引有效,则该函数应返回INTARR_OK,并将ia [index]值设置为val。如果ia为null,则返回INTARR_BADARRAY,否则,我保持数组未修改并返回INTARR_BADINDEX。但是当我运行此代码时,我收到了以下错误:
intarr.c:37:16: error: invalid operands to binary != (have ‘intarr_t’ and ‘void *’)
if( ia[index] != NULL )
^
intarr.c:42:21: error: invalid operands to binary == (have ‘intarr_t’ and ‘void *’)
else if (ia[index] == NULL)
有人知道这个错误意味着什么吗?
intarr_t的定义:
typedef struct {
int* data;
unsigned int len;
} intarr_t;
答案 0 :(得分:2)
我不知道intarr_t是什么,但如果它是一个int,你可以将它比作NULL而不是0;如果它是一个字符,你可以将它与NULL进行比较,但不能与'0'
进行比较。该消息表示NULL是空指针,而intarr_t显然不是指针,因此存在类型冲突。
现在您已经发布了intarr_t - 什么时候无效?也许你需要
if (ia[index].data != NULL)
答案 1 :(得分:0)
OP正在尝试将指针(NULL)与不起作用的结构intarr_t
进行比较。
出现功能应该更像下面的内容。需要传入数组中的元素数量。还需要将int val
转换为.data
的字符串。
intarr_result_t intarr_set(intarr_t* ia, unsigned NumElement,
unsigned index, int val ) {
if (ia == NULL) {
return INTARR_BADARRAY;
}
if( index >= NumElement) {
return INTARR_BADINDEX;
}
char buffer[50];
sprintf(buffer, "%d", val);
ia[index].len = strlen(buffer);
ia[index].data = strdup(buffer);
return INTARR_OK;
}
答案 2 :(得分:0)
我犯了同样的概念错误:在你的情况下ia
是指针而不是ia[index]
,确实ia[index]
是intarr_t
struct的实例。
要解决此问题,您必须以这种方式使用&
:
if(&ia[index] != NULL)
{
...
}
我希望我能提供帮助。