2014-11-05 76 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) 
{ 
    ... 
} 

我希望我是有幫助的。

相關問題