从给定字符串中删除\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
。
答案 0 :(得分:7)
您的问题源于缺少#include
指令。您的意图是从<algorithm>
致电std::remove()
,但您无意中从<cstdio>
致电std::remove()
。所以用
#include <algorithm>
它应该有用。
(恕我直言std::remove(const char*)
应为std::remove_file(std::string const&)
或至少为std::remove_file(const char*)
。)