将char*转换为int
嗨,我有下面的代码,出于某种原因,我得到了错误,似乎无法找出原因将char*转换为int,c,pointers,char,int,C,Pointers,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, &am
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;
}
您的函数返回
long
。因此,将return语句更改为:
return 0L;
NULL
的一个可能定义是(void*)0
,当您返回时,它将转换为long
NULL是指针,而不是整数。它可以实现为#define,扩展为0(整数常量)或((void*)0)空指针常量。如果要返回一个表示“发生错误”的值,可能需要返回一个整型常量。值0和-1是传统值
更好的方法是为成功/失败返回布尔状态值,并通过指针参数返回该值:bool\t convertToInt(const char*s,long*value)
。有关示例,请参阅标准库函数strtol。问题在于:
return NULL;
返回NULL
,但函数的返回类型为long
此外,您的函数名为convertToInt()
,但它返回一个long
,这意味着一个convertToLong()
函数名。正确的代码应该是,假设convert
是一个带数字的字符串:
long convertToLong(char *convert) {
long val = 0L;
char *p = convert;
while (isdigit(*p)){
val = val * 10 + (*p - '0');
p++;
}
return val;
}
为什么要将指针转换为整数呢?有一种代码味道,它是一个convertToInt
,意思是一个int,而不是一个long,这是有误导性的。你能告诉我你打算如何使用convertToInt
函数吗?答案可能取决于此。bool\t
?我猜你的意思是bool
。是的,bool,不是bool\t。