码迷,mamicode.com
首页 > 其他好文 > 详细

std::string::find 返回值问题

时间:2019-11-13 23:44:37      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:long   str   出现   直接   出错   ble   使用   pre   sscanf   

使用std::string 查找find 指定字符串的返回值是size_t类型,这个类型是

unsigned long long

如果使用int 类型来存储返回值的话,查找失败,返回是-1;

如果直接依次来判断是否查找成功的话,可能会出现bug,比如下例:

        std::string temp("+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667");

	double semiMajorA = 0;
	if (temp.find("+a=") >= 0)
	{
		sscanf(temp.c_str(), "%*[^=]=%lf", &semiMajorA);
	}    

上面的代码中是不存在“+a=”的,按理说是不会执行到sscanf的,但是实际调试中发现,程序会进去执行sscanf。

问题就出在,find的返回值的判断上,由于返回值可能是unsigned类型,所以上述判断出错。

改成以下写法,就没问题了

if (int(temp.find("+a=")) >= 0)
{
  sscanf(res.c_str(), "%*[^=]=%lf", &semiMajorA); 
}

  

std::string::find 返回值问题

标签:long   str   出现   直接   出错   ble   使用   pre   sscanf   

原文地址:https://www.cnblogs.com/xingzhensun/p/11853946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!