std :: stol的问题 - 'std :: invalid_argument'what():stol

时间:2017-05-31 08:21:51

标签: c++ c++11 std

std::stol存在问题。我发现有关std::stolstd::stoi问题的所有答案都在处理C ++ 11编译/构建。

std::string myString;
long myLong = std::stol(myString);

当我使用std::stol()时,我收到以下错误:

terminate called after throwing an instance of 'std::invalid_argument'
  what():  stol
Aborted (core dumped)

有什么想法吗?使用gcc -std :: C ++ 11构建工作正常。 注意:我认为这是我使用的第一个C ++ 11表达式。

2 个答案:

答案 0 :(得分:3)

当您的字符串不包含可以成功转换为long的有效数字时,这是预期的行为。

为避免程序为terminate d,您可以将代码包装在try...catch block中并处理异常。

答案 1 :(得分:0)

try...catch之外,您可以使用istringstream

std::string s; cin>>s;
std::istringstream iss(s);
long num;
if (!(iss >> num).fail()) {
     std::cout << num << std::endl;
     std::cout << std::stol(s) << std::endl; //safe
}
else {
      std::cerr << "Problem during conversion!" << std::endl;
}
如果您首先检查是否可以使用stol

将字符串解析为terminate,则

long永远不会导致对istringstream的任何调用

online example