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