您的位置:首页 > 其它

小心stringstream使用时的一个陷阱

2011-10-16 09:56 141 查看
前几天在调试程序时发现一个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码,这样就可以得到预期的结果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: