2

我正在使用第三方代码,它有自己的 std::ostream operator<< 实现,来处理第三方的类型。我为此输出使用 stringstream - 例如:

string ToString(const thrdPartyType& structure)
{
stringstream outputStream;
outputStream<<structure;
return outputStream.str();
}
...
string str = ToString(structure);
...

此结构包含设置为 NULL 的指针成员。当使用 operator<< 并将 of 赋值str()为字符串时,我看到(通过 gdb - print str)有许多前导 '\000' 字符,然后是我需要的字符串数据。

我怎样才能修剪那些 NULL 以便只获得真实的而不是空的数据?

PS 确切的代码在 Windows VC++ 中运行良好...

谢谢你。

4

2 回答 2

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();
}
于 2010-11-25T15:20:45.017 回答
2

如果您有可用的boost,类似下面的内容会将字符串中的所有 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
于 2016-02-05T19:41:17.973 回答