2010-11-25 2 views
2

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

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

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

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

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

Спасибо.

+1

Это звучит так, как будто код третья сторона сломана. Может быть, вы должны подать отчет об ошибке. – 2010-11-25 15:16:05

+0

Во-первых, outputStream для печати? На какой платформе вы используете gdb. Если это указатели печати, они 64-битные, где они не работают, что может объяснить, почему вы видите больше нулевых символов? – CashCow 2010-11-25 15:44:19

ответ

2

Вы ищете такое решение?

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(); 
} 
1

Если у вас есть импульс доступны, что-то вроде заменит все экземпляры 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 
Смежные вопросы