Удалить NULL из std :: string - PullRequest
       13

Удалить NULL из std :: string

2 голосов
/ 25 ноября 2010

Я использую сторонний код, который имеет собственную реализацию для std :: ostream operator <<, для обработки стороннего типа. Я использую stringstream для этого вывода - как: </p>

string ToString(const thrdPartyType& structure)
{
stringstream outputStream;
outputStream<<structure;
return outputStream.str();
}
...
string str = ToString(structure);
...

Эта структура содержит члены-указатели, для которых установлено значение NULL. При использовании оператора << и присвоении <code>str() в строку, я вижу (через gdb - print str), что есть много ведущих символов '\ 000', а затем необходимые мне строковые данные.

Как я могу обрезать эти NULL, чтобы получать только реальные, а не пустые данные?

P.S. Точный код прекрасно работает в Windows VC ++ ...

Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2016

Если у вас есть boost , что-то вроде следующего заменит все значения null в строке другим значением.

boost::replace_all(str,boost::as_array(""),"NULL");

Например

char buf[10] = "hello";
string str(buf,buf+10);
boost::replace_all(str,boost::as_array(""),"NULL");
cout << str << endl;

Создает следующий вывод

helloNULLNULLNULLNULLNULL
2 голосов
/ 25 ноября 2010

Вы ищете такой способ работы?

string ToString(const thrdPartyType& structure)
{
   stringstream outputStream;
   outputStream << structure;

   stringstream workaround;
   while(! outputStream.eof ) {
   char t;
   outputStream >> t;
   if(t != '\0')
    workaround << t;
   }

   return workaround .str();
}
...