本文主要是介绍小心stringstream使用时的一个陷阱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前几天在调试程序时发现一个bug,和对stringstream的不当使用有关,代码如下:char number = 0;
std::stringstream str_number;
str_number << number;
.....
这段代码的目标是把一个8位整数转换成一个字符串,但实际上不能达到这个效果。
如果在转换后加入打印信息:
std::cout << "the number is " << str_number.str() << "\n"
会打印出一个空字符串,而不是数字0。
问题出在number的类型是char上,stringstream 看到char类型,并不把它视作一个8位整数来对待,而是作为字符类型对待,
这样在保存过程中没有把对应的数字转换成ascii码,而是直接保存为0,这样就会得到一个以0为结尾的空字符串。
为了得到我们期望的结果,需要把代码改成:
str_no << (int) number;
对number做强制类型转换,使得stringstream把它看做一个整数,然后转换成对应的ascii码,这样就可以得到预期的结果了。
这篇关于小心stringstream使用时的一个陷阱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!