strlcpy

出典: フリー百科事典『ウィキペディア(Wikipedia)』

strlcpyC言語文字列を安全にコピーするための関数である。危険な使い方をしてしまいがちな関数 strcpystrncpy の代替として、Todd C. Miller およびシオ・デ・ラット (Theo de Raadt) が開発した。

プロトタイプ

size_t strlcpy (char *dst, const char *src, size_t size);

であり、ポインタ src の指すアドレスから最大で size - 1 バイトの文字列を dst にコピーし、dst の指す文字列が必ずヌル文字で終わるようにする。これによって、dst が char 配列の場合に sizeof(dst) を size として指定すればバッファオーバーランしないことが保証される。

strncpy は似たプロトタイプを持つが、最大で size バイトをコピーするのでヌル文字で終わるとは限らない点や、文字列が短い場合に dst の残った部分をすべてゼロで埋める点が strlcpy と異なる。

Miller と de Raadt は OpenBSD の開発者であり、strlcpy を最初に実装した OS は OpenBSD 2.4 である。以後、FreeBSD 3.3 を含め、SolarisMac OS X等の各OS、OpenSSL等のライブラリにも採用されている。

一方で、GNU Cライブラリ (glibc) の開発者たちは、GNU Coding Standardsで禁じられている「長い行を黙って切り詰める」関数である、このような仕様の関数はバグである、いい加減なプログラムを助長してしまう、新たなセキュリティ問題を生む、など否定的な見解を示しており[1]、標準規格に含まれない限りはglibcには実装しない意向である。

なお、strcat の代替として同様に strlcat がある。

[編集] 脚注

  1. ^ libc-alphaメーリングリストでの議論[1][2]より
他の言語