我目前正在开发一个函数,它将一个值列表转换为整数。对于float类型,我们在toFloatList()
中有一个方便的float8in_internal_null()
函数,如果转换成功,它将返回适当的float值,但如果列表元素的转换失败,则返回NULL。
但是,在处理整数和使用atoi()
函数时,我遇到了一个限制。与float8in_internal_null()
不同,atoi()
在将列表中的元素转换为整数失败时不会返回NULL。相反,它返回0。
- *AGE中的某个库中是否有替代函数,可以帮助我在无法转换为整数时实现返回NULL**的预期行为?我希望在这方面得到任何指导。
3条答案
按热度按时间k2fxgqgv1#
如果需要转换的字符串为零,可以使用check,如果它不是零并且atoi()返回0,则字符串不能转换为整数。因此,您可以返回或传递NULL。
字符串
此外,如果你愿意,你可以使用AGE中的函数
age_tointeger
,在C函数中使用DirectFunctionCall
调用这个函数。编辑:然后我们应该利用Postgres的
strtoi64(string, &errorOK, 10)
来转换一个常规的整数字符串,这个函数处理无效语法和超出范围的整数等错误。ha5z0ras2#
在C或C中,没有像其他语言那样的null或None这样的特殊值。NULL在C-C中只是一个将其定义为0的宏。因此,与其他语言不同,C-C++函数返回0。您需要添加一个额外的检查,以验证案例是否是错误,或者0是否是正确答案。
字符串
相反,如果你可以使用C++库,你也可以使用
std::stoi
。在这种情况下,它会引发一个异常,这个异常是可以处理的。5fjcxozz3#
在同一个函数中,不可能既以字符串的形式返回
NULL
,又以int
的形式返回。NULL
是一个宏,它等价于0,如果你返回NULL
作为一个int,你会得到0
,这违背了你想要的功能。