我有以下测试程序:
#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的解决方案(超出范围时不会出现段错误),还是有人有其他想法?
答案 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的大小,它可能超出范围。