2

std :: ostream operator <<の独自の実装を持つサードパーティのコードを使用して、サードパーティの型を処理しています。私はこの出力にstringstreamを使用しています-次のように:

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

この構造体には、NULLに設定されているポインターメンバーが含まれています。演算子<<とstr()文字列への割り当てを使用すると、(gdb-を介してprint str)先頭に「\ 000」文字が多数あり、次に必要な文字列データがあることがわかります。

空ではなく実際のデータのみを取得するために、これらのNULLをトリミングするにはどうすればよいですか?

PS正確なコードはWindowsVC++で正常に機能します...

ありがとうございました。

4

2 に答える 2

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();
}
于 2010-11-25T15:20:45.017 に答える
2

ブーストを使用できる場合は、次のようにすると、文字列内の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
于 2016-02-05T19:41:17.973 に答える