我有以下测试程序:
#include <string>
int main(int argc, char* argv[]) {
try {
return std::stoi("3000127232");
}
catch (...) {
return 0;
}
}
当我使用 C++11 在 ubuntu 上编译它并运行代码时,我得到的返回值为 0。这是我所期望的,因为字符串中的值超出了范围。
但是当我为 rasperry-buildroot 18.11 编译它时,我可以在 rasperry 上运行该程序,但我遇到了一个段错误。这是我没想到的。
是否有另一种解决方案可以将字符串转换为整数(超出范围时没有段错误(,或者有人有其他想法吗?
std::stoi
在值超出范围时引发异常。如果实现未能做到这一点,那么它就不符合标准。这可能是编译器错误。
如果您的目标是不支持异常的系统,或者由于某些其他原因不符合标准,则还有其他方法可以将字符串转换为不使用异常的整数,例如 std::strtol
。
你可能想检查覆盆子上的 int 大小,它可能超出了范围。