sstream两个坑

好一段时间没有写c++了,最近计划写一个日志收集及分析系统,发现有点手生,还被sstream坑了好久,以往有过注意,但时间久了,就忘记了,现记录如下:

1. 坑一

stringstream来自头文件<sstream>,它的方法str()实际是进行了一次内存拷贝,返回了一个临时对象,所以就会有如下的问题:

stringstream ss;
ss << "abc";

const char *ptr = ss.str().c_str(); //错误

const string &str = ss.str();
const char *ptr = str.c_str(); //正确

str()的函数注释为:Copying out the string buffer.

2. 坑二

stringstream的clear方法不是用来清空内存的,而是用来清除错误状态的,该方法继承于basic_ios,比如使用stringstream进行格式转换时出错了,判断完状态值后,需要继续操作,就需要先clear一把。如果是想清空内存,应该使用str(""),即拷贝一个"\0"就完成清空了。

发表于 2016年12月31日 16:20   评论:0   阅读:2174  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo