Подтвердить что ты не робот

С++ Как удалить \0 char из std::string

Каков правильный способ удаления \0 char из заданной строки.

Я пытаюсь без успеха:

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 в середине из-за исходной логики.

4b9b3361

Ответ 1

Ваша проблема возникает из недостающей директивы #include. Ваше намерение состояло в том, чтобы вызвать std::remove() из <algorithm>, но вы случайно назовете std::remove() от <cstdio>. Итак,

#include <algorithm>

он должен работать.

(IMHO std::remove(const char*) должно быть std::remove_file(std::string const&) или не менее std::remove_file(const char*).)