如何从std :: string中删除\ 0字符的C ++方法

12

如何正确地从给定字符串中删除\0字符?

我尝试了但没有成功:

std::string msg(data); // Data comes from a remote system connected via socket...
msg.erase(std::remove(msg.begin(), msg.end(), '\0'), msg.end());

这会导致编译错误:

error: cannot convert ‘std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’

data来自使用socket的远程系统,其中包含由于源代码逻辑而在中间带有/0的几个代码数字。


1
这不是一个好主意,对吧?自从C++11以来,std::string已经由'\0'终止,所以我认为这可能不明智。 - erip
2
@erip:那个 '\0' 不是数据的一部分。它是实现细节,是接口的一部分。这不会影响它。 - Lightness Races in Orbit
1
请提供一个 [mcve],以便出现错误。你所拥有的代码应该是可以工作的。 - NathanOliver
4
你是否#include <algorithm>了? - MicroVirus
2
缺少标题只得到五个赞。哎 - Lightness Races in Orbit
显示剩余11条评论
1个回答

8
你遇到的问题源于缺少了 #include 指令。你本意是从 <algorithm> 中调用std::remove(),但不小心从 <cstdio> 中调用了std::remove()。因此,出现了这个问题。
#include <algorithm>

应该可以正常工作。

在我看来,std::remove(const char*) 应该改为 std::remove_file(std::string const&) 或至少是 std::remove_file(const char*)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接