将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。