从 std::string 中删除 NULL

发布于 2024-10-04 05:47:53 字数 529 浏览 3 评论 0原文

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

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

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

如何修剪这些 NULL 以便仅获取真实数据而不是空数据?

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

谢谢。

I'm using a third party code which has its own implementation for std::ostream operator<<, to handle the third party's type.
I'm using stringstream for this output - like:

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

This structure contains pointer members, which are set to NULL. When using the operator<< and the assignment of str() into a string, I see (via gdb - print str) that there are many leading '\000' characters, then the string data I need.

How can I trim those NULLs in order to get only the real, not empty data?

P.S. The exact code works fine in Windows VC++...

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伤感在游骋 2024-10-11 05:47:53

您是否正在寻找这样的解决方法?

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();
}

Are you looking for a workoround like this?

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();
}
蓝天 2024-10-11 05:47:53

如果您有 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

If you have boost available, something like the following will replace all instances of null in a string with another value.

boost::replace_all(str,boost::as_array(""),"NULL");

For example

char buf[10] = "hello";
string str(buf,buf+10);
boost::replace_all(str,boost::as_array(""),"NULL");
cout << str << endl;

Produces the following output

helloNULLNULLNULLNULLNULL
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文