📜  libc++abi.dylib:以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换 - C++ (1)

📅  最后修改于: 2023-12-03 15:02:40.924000             🧑  作者: Mango

异常终止:stoi:无转换 - C++

当您使用 std::stoi() 函数将字符串转换为整数时,如果字符串无法转换为整数,则会抛出 std::invalid_argument 异常,表明转换失败。

但是,如果您没有正确捕获这个异常,程序将会以未捕获异常的形式终止。您可能会看到类似于以下消息的错误:

libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion

这意味着您需要使用 try-catch 块来捕获异常并通过适当的错误处理来处理它。

以下是 try-catch 块的示例代码:

#include <iostream>
#include <string>

int main() {
  std::string str = "hello";
  
  try {
    int num = std::stoi(str);
    std::cout << "The integer value is " << num << std::endl;
  }
  catch (const std::invalid_argument& e) {
    std::cerr << "Invalid argument: " << e.what() << std::endl;
  }
  
  return 0;
}

这个代码块中,std::stoi() 函数被用于将一个不可转换为整数的字符串转换为整数。这会导致 std::invalid_argument 异常被抛出。

try 块中的代码试图将字符串转换为一个整数,并将其输出到控制台。

但由于字符串无法转换为整数,异常被抛出并被 catch 块捕获。catch 块中的代码输出异常消息到标准错误流中。

通过以上方式,您可以避免出现异常终止的问题,并通过适当的错误处理来处理异常。