C – 使用atoi时出错

我试图使用atoi函数来获得从字符串到int的转换.问题是我有一个包含整数和字符串值的字符串数组.

从我读过的内容来看,为了从中获取错误代码,函数必须返回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 :: stol和std:stoll.有关详细信息,请参阅在线文档

> std::stoi, std::stol, std::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_argument或std :: out_of_range,具体取决于throw的原因.如果你希望它们以不同的方式处理,你可以写两个catch块.

相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
公众号推荐
   一个历史类的公众号,欢迎关注
一两拨千金