2015-12-03 15 views
10

Qual è il modo corretto di rimuovere i caratteri \0 da una determinata stringa.C++ Come rimuovere 0 char da std :: string

sto cercando senza successo:

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

Questo dà errore di compilazione:

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 proviene da un sistema remoto tramite presa, e contiene diversi pezzi di numeri di codice con /0 a il mezzo a causa della logica sorgente.

+1

Questa non è una buona idea, vero? Dal momento che C++ 11, 'std :: string' è terminato da' '\ 0'', quindi penso che questo potrebbe non essere saggio. – erip

+0

Sto ricevendo i dati del socket da un sistema remoto che viene fornito con i caratteri '\ 0'. Quella stringa verrà elaborata in una logica di comparazione delle stringhe e in seguito emetterà mySql insert/crea che sta causando diversi errori dovuti alla presenza di '\ 0' sulla stringa. Quindi ho bisogno di disinfettare la stringa rimuovendo questi caratteri. – Mendes

+2

@erip: che '\ 0' non fa parte dei dati. È un dettaglio di implementazione, parte dell'interfaccia. Questo non lo influenzerebbe. –

risposta

7

Il problema deriva da una direttiva #include mancante. La tua intenzione era di chiamare std::remove() da <algorithm>, ma inavvertitamente hai chiamato std::remove() da <cstdio>. Quindi con

#include <algorithm> 

dovrebbe funzionare.

(IMHO std::remove(const char*) dovrebbe essere std::remove_file(std::string const&) o almeno std::remove_file(const char*).)

+0

Questo ha risolto il problema. Grazie Walter. – Mendes

Problemi correlati