C++ std::stoi导致SEGFULT
我有以下测试程序:C++ std::stoi导致SEGFULT,c++,segmentation-fault,buildroot,C++,Segmentation Fault,Buildroot,我有以下测试程序: #include <string> int main(int argc, char* argv[]) { try { return std::stoi("3000127232"); } catch (...) { return 0; } } #包括 int main(int argc,char*argv[]){ 试一试{ 返回标准::stoi(“3000127232”); } 捕获(…){ 返回0;
#include <string>
int main(int argc, char* argv[]) {
try {
return std::stoi("3000127232");
}
catch (...) {
return 0;
}
}
#包括
int main(int argc,char*argv[]){
试一试{
返回标准::stoi(“3000127232”);
}
捕获(…){
返回0;
}
}
当我用C++11在ubuntu上编译并运行代码时,我得到的返回值是0。这是我所期望的,因为字符串中的值超出范围
但是当我为rasperry buildroot 18.11编译它时,我可以在rasperry上运行这个程序,但是我得到了一个错误。我没想到会这样
是否有其他解决方案将字符串转换为整数(超出范围时不带segfaults),或者有人有其他想法吗?
std::stoi
指定在值超出范围时引发异常。如果实现没有做到这一点,那么它就不符合标准。这可能是一个编译器错误
例如,如果目标系统不支持异常或由于某些其他原因不一致,则有其他方法可以将字符串转换为不使用异常的整数,例如
std::strtol
std::stoi
指定在值超出范围时引发异常。如果实现没有做到这一点,那么它就不符合标准。这可能是一个编译器错误
例如,如果您的目标系统不支持异常或由于其他原因不一致,则有其他方法可以将字符串转换为不使用异常的整数,例如
std::strtol
您可能需要检查raspberry上int的大小,它可能超出范围。您可能需要检查树莓上int的大小,它可能超出了范围。你能调试你的程序并查看segfaults在哪里吗?你能在rasperry上获得segfaults,并带有一些范围内的值,如0
?你能调试你的程序并查看segfaults在哪里吗?你能在rasperry上获得segfaults,并带有一些范围内的值,如0
?Raspi在ARM上运行,所以它可能在ARM上运行32位intRaspi,所以它可能有32位int