2012-05-09 67 views
0

我的代码片段包含在(36和37是行号):初始化时将整数指针没有指针和整数之间的演员和比较

36  char* colon_unit = extract_colon_unit(zPath, path, &p_index); 
37  if (colon_unit == NULL) 

在编译过程中,我得到一个警告:

AC:36:警告:初始化时将整数指针不进行强制转换

当我删除的指针,

char colon_unit = extract_colon_unit(zPath, path, &p_index); 

它表明:

交流转换器:37:警告:指针和整数之间的比较

我怎样才能解决这个问题?

+1

'extract_colon_unit'返回什么? – interjay

+1

你的'extract_colon_unit'声明如何?在使用发生之前是否声明? –

+1

请发布extract_colon_unit()声明。 –

回答

2

这意味着函数extract_colo_unit()正在返回一个字符(char)而不是一个字符指针(char*)。如果将数据类型colon_unit更改为char,那么您将不会获得第一个错误,因为现在变量和赋值都是相同的类型。

但是,当您将colon_unit与NULL进行比较时,则会将一个字符(即colon_unit)与一个指针进行比较。也就是说,NULL被定义为(void*)0,所以你得到了第37行的第二个错误。

解决方案完全取决于你的逻辑以及这个函数返回NULL的含义。但是,如果是错误情况或者没有有效值的情况,它只是返回0而不是NULL,并且与行37中的0进行比较。

+0

嗨binW。感谢您的解释。函数colon_unit返回一个目录的名称。所以,如果(colon_unit == NULL)检查目录的名称是否为空。因此,我认为我不能使用if(colon_unit = 0) – Tinyspark

+0

@Tinyspark如果函数extract_colon_unit返回名称,那么它的返回类型应该是char *而不是char,在这种情况下,你不应该得到任何上述错误。你可以在你的问题中添加extract_colon_unit函数的声明吗? – binW