2017年1月7日土曜日

c++ ログ出力について:stringstream

プログラムの動作ログとしてよく文字列のログファイルを作成します。これまではよくcからのくせで、sprintf()文を使ってきました。
しかしこれって、char*を使っていますから危ないですよね。(メモリ破壊やセキュリティ上も)できれば、c++のbasic_stringを使った方がいいです。そこで、stringstrream型を使います。(それにM$のVisualStudioだと微妙に文法がg++と違い、やたらwarningを出してきます。両方で動作するプログラムを作成するとき嫌な思いをこれまでしてきました。)

改めてサンプルを作ろうと思い調べてみたら、stringstreamにはヘッダとして、strstreamとsstreamの2つがあるとのこと。違いは、strstreamの方が先輩なんですが実装にchar*を使っているとのこと。危険なので、内部の実装をbasic_stringなsstreamを使えとのことです。

まあ面倒なことはおいといて、一目でわかるサンプルを以下に示します。

実行すると以下の様な感じになります。

bash-3.2$ ./sstream
3.14000, 4.14000
123, 123456

まず、文字列をdoubleに変換して+1.0しています。次が数値をstirngsttreamに取り込み、string型でappendしています。これで大概のことはできます。

0 件のコメント:

コメントを投稿