删除 \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
来自使用套接字的远程系统,并包含几段带有/0
的代码。由于源代码逻辑,在中间。
最佳答案
您的问题源于缺少 #include
指示。你打算调用 std::remove()
来自 <algorithm>
, 但你无意中调用了 std::remove()
来自 <cstdio>
.所以用
#include <algorithm>
它应该可以工作。
(恕我直言 std::remove(const char*)
应该是 std::remove_file(std::string const&)
或至少是 std::remove_file(const char*)
。)
关于C++ 如何从 std::string 中删除\0 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066875/