std::stoi 会导致段错误

std::stoi results in segfault

本文关键字:段错误 错误 stoi std      更新时间:2023-10-16

我有以下测试程序:

#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 大小,它可能超出了范围。