std::stol
存在问题。我发现有关std::stol
或std::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表达式。
答案 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
的任何调用