MW211 EXIT

devlog
C++/【未解決】書式付文字列結合
2012年07月11日
PHPだと書式に変換した文字列を結合するのはたやすい。
┌──────────────────────────────────────┐
│$a  = 'Kato';                                                               │
│$a .= sprintf('%d', 123);                                                   │
│$a .= sprintf('%d', 9);                                                     │
├──────────────────────────────────────┤
│echo $a;                                                        →'Kato1239'│
└──────────────────────────────────────┘

だからついCでも「sprintf()」の戻り値は編集後の文字列だと錯覚してしまうが
戻り値は処理結果(成功したか)であって、「sprintf(a, '%d', 123)」みたいに
編集後の文字列を取得する変数は、第一引数にねじ込まなければならない。

さて、MFC(Visual C++)において、CString型でFormatというメソッドがあるが
上記を再現すると、以下のようになってしまい、二倍の行を費やしてしまう
┌──────────────────────────────────────┐
│CString a, b;                                                               │
│a = 'Kato'                                                                  │
│b.Format("%d", 123);                                                        │
│a += b;                                                                     │
│b.Format("%d", 9);                                                          │
│a += b;                                                                     │
└──────────────────────────────────────┘

例えば、以下のようにすると、編集後のbが代入されるのではなく
bを編集した結果(成功したか)が代入されるみたい。
┌──────────────────────────────────────┐
│a += b.Format("%d", 123);                                                   │
└──────────────────────────────────────┘

また、こんな風に自己循環させるのもダメらしい。
┌──────────────────────────────────────┐
│a.Format("%s%d", a, 123);                                                   │
└──────────────────────────────────────┘

なんか、一行で書けるうまいてはないものか?(やっぱりユーザ関数?)
分類:C/C++、【未解決】