2014-11-24 202 views
0

警告:返回使指针中的整数不带转换[默认情况下启用] 返回NULL;无法在需要返回整数的函数中返回NULL

我想在我的函数中返回NULL,但它不工作,我不明白为什么是这样。下面是我的代码,但我不会发布整个事情,因为我只有return语句的问题。我希望你能够明白。

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 

typedef struct { 
int* data; 
unsigned int len; 
} intarr_t; 

int intarr_save_binary(intarr_t* ia, const char* filename) 
{ 
    if(ia == NULL) 
    { 
     return NULL; // problem here, I want to return NULL if intarr_t*ia is null 
    } 
    else 
    { 
    // remaining code here, but is uncessary 
    return 0; 
    } 
} 

我的最后一个问题是我该如何检查char数组的文件名是否为NULL?

我这样做:

if (filename == NULL) 
{ 
    return NULL; 
} 
+1

那么,返回类型被声明为一个整数。如果它返回一个指向一个整数的指针,那么你可以返回NULL。 – 2014-11-24 01:31:18

+0

我有点困惑,这是否意味着我必须更改我的函数声明? – TakShing 2014-11-24 01:32:45

+0

也值得了解,null实际上是地址0 ... http://c-faq.com/null/macro.html – 2014-11-24 01:33:52

回答

0

如果返回类型为int,你不能返回一个NULL。为了显示错误,如果您在任何调用函数中检查该值,则可以返回特殊值,如零或-1。许多函数在成功时返回非负数,或者在错误时返回-1。例如,与SQL不同,

NULL不能存储在int变量中。如果您忽略该警告并无论如何返回NULL,那么NULL将被转换为零。调用函数将无法分辨您是返回NULL还是零。

如果您的功能只需指示成功或失败,那么通常返回1表示成功,失败返回0。当被视为布尔值时,Zero表示“false”(如在if语句中),非零表示“true”。

+0

奇怪的是,我记得在多个期望int返回类型的函数中返回NULl? O.o,我将不得不再次检查。将返回-1作为一个NULL?我意识到这不是那么重要,但是当我通过我的func时出现了分段错误,所以我想证明它不符合这种可能性。 – TakShing 2014-11-24 01:35:16

+1

**不返回'-1'从不作为NULL **作为指针,值为'NULL'时,null值为'0'。 – 2014-11-24 01:36:00

+0

如果返回-1,则应该必须让调用函数明确检查该值。当然,如果-1已经是该函数的有效返回值,那么这将不起作用。 – yellowantphil 2014-11-24 01:36:18

1

它看起来像你误解了什么NULL意味着在C.类型不可为空。 NULL实际上只是指针值为0的简写!而int不是一个指针。