strlcat
strlcpyと同じ系。
size_t strlcpy(char *dst, char *src, size_t size)
dstの末尾('\0'の位置)から、srcをくっつける。
strlen(dst) + strlen(src) > size であれば、size-1までつなげて、
末尾をヌル止めする。
sizeにはsizeof(dst)を入れるのが普通。strlen(dst)とかうっかりやりそうだけどやると コピーされない。
※追記:普通とか言っておいていきなりはまった俺w
文字列をポインタで参照している場合はsizeofではダメですた。
char ary[32] = "abcdefgh"; char *p = ary; strlcat(p, "hoge", sizeof(p)); printf("ary: %s\n", ary); // -> "abcdefgh"
これだと連結しれくれない。
なぜなら sizeof(p) は sizeof(char *) -> ポインタのサイズ(手元の環境だと4) だから。
sizeof(dst)は、dstが配列名のときは有効。
戻り値は「実際に作ろうとした」サイズ。つまり strlen(dst) + strlen(src)。
関数コール後の strlen(dst) と比較すると、最後までつなぐことができたのか分かる。