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

标签 c++ stdstring

删除 \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/

相关文章:

c++ - 为 STL vector 构建接口(interface)

c++ - 当编译器知道长度时,为什么不优化字符串赋值?

c++ - "Why switch statement cannot be applied on strings?"的答案是否仍然正确,即使使用 C++11/14?

c++ - 如何有效地用另一个 std::string 的迭代值替换 std::string 中的字符?

C++ std::string::at 抛出 std::out_of_range

c++11 - 在 gdb 中调用 std::~basic_string()

c++ - 计算最小N的置位位数

c++ - cmake,关于 include_directories 的说明

c++ - DDEConnect 在 Unicode 上失败

c++ - 将 C++ 对象(尤其是 STL 容器)移动到特定的内存位置