std::stoi 导致段错误

std::stoi results in segfault

我有以下测试程序:

#include <string>
int main(int argc, char* argv[]) {
    try {
        return std::stoi("3000127232");
    }
    catch (...) {
        return 0;
    }
}

当我在 ubuntu 上使用 C++11 和 运行 编译代码时,我得到的 return 值为 0。这是我所期望的,因为字符串超出范围。

但是当我为 rasperry-buildroot 18.11 编译它时,我可以 运行 rasperry 上的程序,但我遇到了段错误。这是我没想到的。

是否有另一种将字符串转换为整数的解决方案(超出范围时没有段错误),或者有人有其他想法吗?

std::stoi 指定在值超出范围时抛出异常。如果实现未能做到这一点,那么它就不符合标准。这可能是一个编译器错误。

例如,如果您的目标系统不支持异常或由于某些其他原因不符合标准,则还有其他方法可以将字符串转换为不使用异常的整数,例如 std::strtol.

您可能想检查您的覆盆子上的 int 大小,它可能超出范围。