C语言 是否有一个类似于float8in_internal_null()的函数来处理Integer类型?

velaa5lx  于 2023-08-03  发布在  其他
关注(0)|答案(3)|浏览(88)

我目前正在开发一个函数,它将一个值列表转换为整数。对于float类型,我们在toFloatList()中有一个方便的float8in_internal_null()函数,如果转换成功,它将返回适当的float值,但如果列表元素的转换失败,则返回NULL
但是,在处理整数和使用atoi()函数时,我遇到了一个限制。与float8in_internal_null()不同,atoi()在将列表中的元素转换为整数失败时不会返回NULL。相反,它返回0。

  • *AGE中的某个库中是否有替代函数,可以帮助我在无法转换为整数时实现返回NULL**的预期行为?我希望在这方面得到任何指导。
k2fxgqgv

k2fxgqgv1#

如果需要转换的字符串为零,可以使用check,如果它不是零并且atoi()返回0,则字符串不能转换为整数。因此,您可以返回或传递NULL。

int result = atoi(string);
if (strcmp(string, "0") != 0 && result == 0)
{
    return NULL;
}

字符串
此外,如果你愿意,你可以使用AGE中的函数age_tointeger,在C函数中使用DirectFunctionCall调用这个函数。
编辑:然后我们应该利用Postgres的strtoi64(string, &errorOK, 10)来转换一个常规的整数字符串,这个函数处理无效语法和超出范围的整数等错误。

ha5z0ras

ha5z0ras2#

在C或C中,没有像其他语言那样的null或None这样的特殊值。NULL在C-C中只是一个将其定义为0的宏。因此,与其他语言不同,C-C++函数返回0。您需要添加一个额外的检查,以验证案例是否是错误,或者0是否是正确答案。

#include <iostream>
#include <string>

int main() {
    int i = atoi(num);
    if (num!="0" && i == 0)
    {
        cout<<"Error"<<endl;
    }
}

字符串
相反,如果你可以使用C++库,你也可以使用std::stoi。在这种情况下,它会引发一个异常,这个异常是可以处理的。

5fjcxozz

5fjcxozz3#

在同一个函数中,不可能既以字符串的形式返回NULL,又以int的形式返回。NULL是一个宏,它等价于0,如果你返回NULL作为一个int,你会得到0,这违背了你想要的功能。

相关问题