2016-04-29 157 views
-2

嗨,我有下面的代码,出于某种原因,我得到了错误,似乎无法解决原因。将char *转换为int

warning: return makes integer from pointer without a cast 

的代码,我是:

long convertToInt(char *convert) { 
     char *p = convert; 
     while(*p){ 
      if(isdigit(*p)) { 
       long val = strtol(p, &p, 10); 
       return val; 
      } else { 
       p++; 
      } 
     } 
    return NULL; 
} 
+0

你为什么要一个指针转换为整数? – Olaf

+7

有一种代码异味,它是一个'convertToInt',意思是一个int,不是很长,这是误导。 – t0mm13b

+0

你能否展示你打算如何使用'convertToInt'函数?答案可能取决于此。 –

回答

2

NULL是一个指针,不是一个整数。它可以实现为一个#define,它扩展为0(整数常量)或((void *)0)空指针常量。如果你想返回一个意味着“发生错误”的值,你可能想要返回一个整数常量。值0和-1是传统的。

更好的是为成功/失败返回一个布尔状态值,并通过指针参数返回值:bool_t convertToInt(const char *s, long *value)。例如,请参阅标准库函数strtol

+1

'bool_t'?我想你的意思是'布尔'。 – unwind

+1

是的,布尔,而不是bool_t。 – 2016-04-29 13:00:18

1

你funtion返回long。因此,改变return语句:的NULL

return 0L; 

一个可能的定义是(void *)0正在被转化为long当你return

0

的问题是在这里:

return NULL; 

,你回NULL,但该函数的返回类型是long


而且你的函数被命名为convertToInt(),但它返回一个long,这将意味着一个convertToLong()函数名。

1

正确的代码会是这样,假设convert与数字的字符串:

long convertToLong(char *convert) { 
    long val = 0L; 
    char *p = convert; 
    while (isdigit(*p)){ 
     val = val * 10 + (*p - '0'); 
     p++; 
    } 
    return val; 
}