MW211 EXIT

devlog
C/snprintfは便利な関数
2014年07月07日
文字列を代入するにはこの関数は便利。
┌──────────────────────────────────────┐
│snprintf(出力先, sizeof(出力先), 入力元);                                   │
├──────────────────────────────────────┤
│snprintf(buf, sizeof(buf), "123");                                          │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│snprintf(出力先, sizeof(出力先), 書式, パラメータ, …);                     │
├──────────────────────────────────────┤
│snprintf(buf, sizeof(buf), "%s-%d", s, d);                                  │
└──────────────────────────────────────┘
こんな感じで使う。

何よりも便利なのは、出力先の末尾に必ずNULLが保証されること。

以下のような場合でも
┌──────────────────────────────────────┐
│char  buf[4];                                                               │
│snprintf(buf, sizeof(buf), "1234");                                         │
└──────────────────────────────────────┘
「1234」ではなく「123+NULL」となってくれる。
最後の一文字は紛失してしまうが、文字の終わりがなくなってしまうので
その恐怖(「%s」とかで出力した場合に例外など)に比べれば全然問題ない。

これが「memcpy()」だと「-1」とかややこしい数式が必要になってくる。
┌──────────────────────────────────────┐
│char  buf[4];                                                               │
│memset(buf, 0, sizeof(buf));                                                │
│memcpy(buf, "1234", sizeof(buf) - 1);                                       │
└──────────────────────────────────────┘

すっごい便利。

但し、高機能ゆえの弱点で処理速度が若干遅いらしい。そこだけは気を付けて。
分類:C/C++