std :: stoi导致段错误

时间:2019-04-09 12:13:41

标签: c++ segmentation-fault buildroot

我有以下测试程序:

#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上运行该程序,但是遇到了段错误。我没想到。

是否存在另一种将字符串转换为int的解决方案(超出范围时不会出现段错误),还是有人有其他想法?

2 个答案:

答案 0 :(得分:1)

如果值超出范围,则指定

Button landscapeTest; public boolean isInLandscape() { int orientation = getResources().getConfiguration().orientation; return orientation == Configuration.ORIENTATION_LANDSCAPE; OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) { @Override public void onOrientationChanged(int orientation) { boolean isInLandscape = isInLandscape(); if (isInLandscape) { landscapeTest = findViewById(R.id.button_landscape); landscapeTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.v("landscapeButton", "I am working!!!"); } }); } } }; 引发异常。如果实现无法做到这一点,则说明它不符合标准。这可能是编译器错误。

例如,如果您针对的系统不支持异常或由于某些其他原因不符合标准,则可以使用其他方法将字符串转换为不使用异常的整数,例如{{1} }。

答案 1 :(得分:1)

您可能想检查树莓上int的大小,它可能超出范围。