由于需要循环向流中写入数据,以此来拼成一个需要的字串,且需要多次使用。在这里的需求下,自己想当然的以为是该类中也有clear()的成员函数,结果发现,并不行,也无法清除其中的已经存的数据,造成了字串拼接过多的错误
使用std::stringstream类的clear()成员函数测试结果
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
stringstream stream;
string b;
stream.precision(10); //重设置stream的精度
double a = 4.23233;
stream << a; //将浮点数a加入缓存
b = stream.str(); //将缓存中的各种数据转换为string类
cout << b << endl;
stream.clear(); //调用clear()方法
double aa = 2.3;
stream << aa; //将浮点数aa加入缓存
b = stream.str(); //将缓存中的各种数据转换为string类
cout << b;
}
4.23233
4.232332.3
clear()并没有有将stringstream对象的缓存清空!
解决方法如下:
1、是在使用的地方定义一个作用域比较短的局部变量,拼接完了,然后发送给客户端,然后系统自动释放其内存,下次使用再定义;
2、可以定义一个作用域较大区域,或者定义在类的头文件中都可以,每次拼接完了之后发送给客户端,清理其已存的内容
std::stringstream strm; //用来拼接返回给客户端的排行榜字串
std::string proceMsg; //最终返回给客户端的字串数据
//
//具体的拼接操作
//
strm.str("");
proceMsg = "";
采用上述方法的测试程序:
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
stringstream stream;
string b;
stream.precision(10); //重设置stream的精度
double a = 4.23233;
stream << a;
b = stream.str();
cout << b << endl;
stream.str(""); //清空缓存
double aa = 2.3;
stream << aa;
b = stream.str();
cout << b;
}
结果如下
4.23233
2.3