gpt4 book ai didi

C++ - 使用 atoi 时出错

转载 作者:可可西里 更新时间:2023-11-01 15:41:28 29 4
gpt4 key购买 nike

我正在尝试使用 atoi 函数来获得从 stringint 的转换。问题是我有一个字符串数组,其中包含整数和字符串值。

根据我的阅读,为了从中获取错误代码,该函数必须返回 0 :

string s = "ssss";
int i = atoi(s.c_str())
if (i == 0)
cout<<"error"<<endl;
end;

如果我的字符串值为 0,我应该如何处理?

另一个问题是这个字符串:string s = "001_01_01_041_00.png"atoi 函数返回值 1。它不应该返回 0 吗?为什么返回 1

最佳答案

这就是 atoi 使用不安全的原因。如果输入无效,它不会检测并通知程序。

C++11 引入了安全的 std:stoi,因为如果输入以某种方式无效,它会抛出异常。还有两个其他变体:std::stolstd:stoll。有关详细信息,请参阅在线文档:

你的代码会变成这样:

try {
string s = "ssss";
int i = std::stoi(s); //don't call c_str()
//if (i == 0) no need to check!
std::cout << i << endl;
}
catch(std::exception const & e)
{
cout<<"error : " << e.what() <<endl;
}

请注意,e 的运行时类型可以是 std::invalid_argumentstd::out_of_range,具体取决于抛出的原因.如果您希望它们以不同的方式处理,您可以只编写两个 catch block 。

关于C++ - 使用 atoi 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13470822/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com