MW211 EXIT

devlog
C/文字列のコピー
2012年10月17日
┌──────────────────────────────────────┐
│char    *in;                                                                │
│char    out[16];                                                            │
└──────────────────────────────────────┘
出力文字列が配列でサイズが決まっているが、
入力文字列がポインタでサイズがわからない場合に、コピーする方法。(in→out)

入力サイズが大きすぎて、末尾のNULL(\0)が落ちてしまうと例外の元になる。

「入力サイズ≦出力サイズ」がある程度保証されているのであれば、
strcpy()を使ってしまえばよい。
┌──────────────────────────────────────┐
│if (strlen(in) < sizeof(out)) {                                             │
│    strcpy(out, in);                                                        │
│}                                                                           │
└──────────────────────────────────────┘
strlen()のサイズと末尾の\0を足したサイズがsizeof()より大きくなってはいけないので
「<=」ではなく「<」である点に注意。

サイズいっぱいにぎりぎりまでコピーしたい場合は、strncpy()を使う。
┌──────────────────────────────────────┐
│memset(out, 0, sizeof(out));                                                │
│strncpy(out, in, sizeof(out) - 1);                                          │
└──────────────────────────────────────┘
末尾の\0分引いたサイズをコピーすることになる。
また、末尾が\0であることを保証するために、直前に\0(0)で全クリアが必要だ。
分類:C/C++