2014-11-05 75 views
0
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为空,则返回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; 
+1

这意味着'intarr_t'不是一个指针。发布'intarr_t'的定义。 – chux 2014-11-05 21:10:59

+0

@chux但是在函数参数上,我已经放入了intarr_t *。除非我必须为ia [index] – user3880587 2014-11-05 21:12:28

+0

做别的事情是的,intarr_t *表示ia是intarr_t的数组;所以ia [index]是一个intarr_t,而不是(显然)一个指针。 – 2014-11-05 21:13:38

回答

2

我不知道的intarr_t是什么,但如果它是一个int,你可以比较它不为NULL,但为0;如果它是一个字符,你可以比较它不是NULL,而是'\ 0'。

该消息表示NULL是空指针,intarr_t显然不是指针,所以存在类型冲突。

所以,现在你已经发布intarr_t - 它何时失效?也许你需要

if (ia[index].data != NULL) 
+2

注意:一个'int'和一个'char'可以和'0'或''\ 0''比较。 '0'或''\ 0''都是'int'。 – chux 2014-11-05 21:13:40

+0

是的。我很强迫。 – 2014-11-05 21:14:01

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; 
} 
0

我做了同样的概念错误:你的情况ia是一个指针,但不ia[index],确实ia[index]是和intarr_t结构的实例。

为了解决你以这种方式使用&问题:

if(&ia[index] != NULL) 
{ 
    ... 
} 

我希望我是有帮助的。

相关问题