我正在使用第三方代码,它有自己的std :: ostream运算符<&lt ;,来处理第三方的类型。 我正在使用stringstream来输出 - 比如:
string ToString(const thrdPartyType& structure)
{
stringstream outputStream;
outputStream<<structure;
return outputStream.str();
}
...
string str = ToString(structure);
...
此结构包含指针成员,这些成员设置为NULL。当使用运算符&lt;&lt;并将str()
分配到一个字符串中,我看到(通过gdb - print str
)有许多前导'\ 000'字符,然后是我需要的字符串数据。
如何修剪这些NULL以便只获取真实数据而不是空数据?
P.S。确切的代码在Windows VC ++中运行良好...
谢谢。
答案 0 :(得分:2)
你在寻找像这样的工作单吗?
string ToString(const thrdPartyType& structure)
{
stringstream outputStream;
outputStream << structure;
stringstream workaround;
while(! outputStream.eof ) {
char t;
outputStream >> t;
if(t != '\0')
workaround << t;
}
return workaround .str();
}
答案 1 :(得分:2)
如果您有提升,则以下内容将使用其他值替换字符串中的所有null实例。
boost::replace_all(str,boost::as_array(""),"NULL");
例如
char buf[10] = "hello";
string str(buf,buf+10);
boost::replace_all(str,boost::as_array(""),"NULL");
cout << str << endl;
生成以下输出
helloNULLNULLNULLNULLNULL