std :: stoi导致段错误

问题描述 投票:0回答:2

我有以下测试程序:

#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(在超出范围时没有段错误),或者是否有人有其他想法?

c++ segmentation-fault buildroot
2个回答
1
投票

如果值超出范围,则指定std::stoi抛出异常。如果实现失败,那么它不符合标准。这可能是编译器错误。

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.