問題タブ [ostringstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++形式のマクロ/インラインostringstream
次のようなことができるマクロを作成しようとしています。FORMAT(a << "b" << c << d)
結果は文字列になります。これは、ostringstreamを作成し、を挿入a...d
して、を返すのと同じ.str()
です。何かのようなもの:
基本的に、FORMAT(a << "b" << c << d) == f()
。
まず、私は試しました:
最初の項目がC文字列(const char *
)の場合、文字列のアドレスを16進数で出力し、次の項目は正常に出力されます。最初の項目がである場合、std::string
コンパイルに失敗します(一致する演算子はありません<<
)。
これ:
正しい出力のように見えますが、もちろん文字列に0
とが含まれています。\b
以下は機能しているようですが、警告付きでコンパイルされます(一時的なアドレスを取得):
1がc-stringのアドレスを出力し、?でコンパイルできない理由を誰かが知っていstd::string
ますか?1と3は本質的に同じではありませんか?
C++0xの可変個引数テンプレートがformat(a, "b", c, d)
可能になると思います。しかし、これを今解決する方法はありますか?
c++ - インライン ostringstream マクロがリロードされました
C++形式マクロ/インラインostringstreamの参照
そこで問題となったのは、オブジェクトをインライン連結して文字列を iostream スタイルで作成できるようにするマクロでした。
答えは次のとおりです。
使用法 (例):
それは美しく機能します-GCCを使用します。Visual C++ 2005 でもコンパイルおよび実行されます。しかし、後者では、マクロを使用するとすべて空の文字列が返され、その理由と修正方法について非常に唖然とします...?
c++ - ostringstreamを再利用する方法は?
アプリが多くの割り当てを行う必要がないように、ostringstream(および基になるバッファー)をクリアして再利用したいと思います。オブジェクトを初期状態にリセットするにはどうすればよいですか?
xcode - Mac OS X ポートが glibstdc++ vsnprintf の pthread_setspecific でクラッシュする - トラブルシューティング方法は?
マルチスレッド サーバーの Mac OS X ポートをテストしています。起動しますが、最初のクライアント要求がワーカー スレッドによって取得された直後に、vsnprintf で終了します。
vsnprintf が pthread_setspecific で一部のスレッド ローカル メモリを操作しようとしているようです。これは不正なポインターを逆参照します。次に、gdb は dlopen 呼び出しをトラップし、エラーを取得して、独自のエラー メッセージをフォーマットしようとして停止します。エラーをフォーマットするには、スレッド ローカル メモリを設定する必要があるためです。
これ以前は、私自身のコードで pthread_create_key、pthread_getspecific、および pthread_setspecific を正常に使用していました。私は自分のアクセスを注意深く記録しましたが、それらが何かを破壊しているとは思いません。
glibstdc++ の一部の static が時間通りに初期化されていない可能性はありますか? どうすればわかりますか?
また、コンパイルとリンクに g++ -pthread を使用しましたが、実行可能マニフェストに libpthread が表示されません。
これをさらにデバッグする方法を知っている人はいますか?
スタックトレース:
クラッシュを引き起こしたコード:
編集:これは、XCode 3.2 DEBUG 構成の ostringstream のバグに関連していると思います。C ++でのintのostringstreamの問題を参照してください
c++ - 動的出力ファイル名 (C++)
動的インデックス (d = {0,...,NUM_DEMES-1}) によって添字付けされた出力ファイルを作成しようとしています。現在、最初の値 (d=0) の出力ファイルのみを取得しています。
これにより、Abundances_0 と Abundances_IDs_0 が作成されますが、他には何も作成されません。それらのファイルに書き込むことができます。他のファイル名は問題なく作成できますが、ファイルが表示されません。
おそらくストリームに関する基本的な何かが欠けているのでしょうが、何が原因なのかわかりません。
編集
次のコードは、正しいファイル名を選別するために出力します。
ただし、"stuff" と "more stuff" は Abundances_0 と Abundances_IDs_0 にのみ表示されます。
c++ - Boostシリアル化とiostreamを接続して、オブジェクトを文字列にシリアル化およびgzip圧縮する方法は?
私はBoostシリアル化ライブラリを使用してきましたが、これは実際には非常に優れており、次のように、シリアル化可能なオブジェクトを文字列に保存するための単純なラッパーを作成できます。
問題は、シリアル化されたデータも圧縮する必要があることを発見したので、boost::iostreamsのフィルターを使用してそれを行うことを検討しています。私はファイルでそれをうまく行う方法を考え出しました:
しかし、圧縮された文字列に正しく保存する方法を理解することはできません。問題は、フィルターのチェーンをフラッシュしていないことですが、ポップと同期を試しましたが、何も機能しないようです。これが私の壊れたコードです:
その結果、一部のデータがストリームバッファのどこかにスタックし、43K程度であることがわかっている場合、圧縮データの完全なブロック(16Kまたは32K)が常にいくつかあります。私のsaveGZFileメソッド。どうやらofstreamを接続すると、適切に閉じてフラッシュしますが、ostringstreamを接続してもそうではありません。
何か助けはありますか?(これは私の最初のstackoverflowの質問です—助けてください、みんな、あなたは私の唯一の希望です!)
c++ - C++ マクロとして以下を記述する方法はありますか?
次のように展開する必要があります。
c++ - 最近の「終わり」は何の役に立つのですか?
数日前、コードが次のような微妙なバグに遭遇しました。
問題は、ends
が '\0' を に貼り付けていたostringstream
ため、theWholeLot
実際には次のように見えたことです"7HABITS\0"
(つまり、最後に null が表示されます)。
を使用して部分をtheWholeLot
取得するために使用されていたため、これは表示されませんでした。これは、ヌルが単なる区切り文字になったため、マスクされたことを意味します。ただし、これが文字列を使用するように変更されたとき、null は突然何かを意味し、次のような比較が行われました。const char *
string::c_str()
失敗するでしょう。これは私に考えさせました:おそらく理由は、ストリームが通常はnullで終了せず、(その後、 a ではなく a をキャストする)が正しく機能するようにする必要があっends
た時代への逆戻りです。ostrstream
str()
string
char *
ただし、 achar *
から aをキャストすることができないためostringstream
、使用ends
は不要であるだけでなく、潜在的に危険であり、クライアント コードからすべて削除することを検討しています。
唯一の環境で使用ends
する明白な理由を誰でも見ることができますか?std::string
c++ - ostringstream の malloc/free を減らす方法はありますか?
私は組み込みアプリを書いています。いくつかの場所では、std::ostringstream を頻繁に使用しています。これは、私の目的には非常に便利だからです。ただし、ストリームにデータを追加すると、malloc と free の呼び出しが多くなるため、パフォーマンスの低下が極端であることがわかりました。それを回避する方法はありますか?
私が最初に考えたのは、ostringstream を静的にして、ostringstream::set("") を使用してリセットすることでした。ただし、関数を再入可能にする必要があるため、これは実行できません。