二进制的操作数无效==错误

时间:2014-11-05 21:06:49

标签: c arrays indexing

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;

3 个答案:

答案 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)
{
    ...
}

我希望我能提供帮助。