memrootじしょ
英和翻訳
strcpy
strcpy
[ˈɛs tiː ɑːr ˈkɒpi]
エスティーアールコピー
1.
C言語の標準ライブラリ関数で、ある文字列を別の文字列(配列)にコピーします。
C言語において、指定されたソース文字列の全内容(NULL終端文字を含む)を、指定されたデスティネーションバッファにコピーするために使用されます。この関数は、デスティネーションバッファのサイズをチェックしないため、バッファオーバーフローの危険性があります。
char
dest[20];
strcpy(dest,
"Hello");
(20バイトの配列destを宣言し、"Hello"をdestにコピーします。)
char dest[20];
20バイト分の文字を格納できる`dest`という名前の配列を宣言します。
strcpy
文字列をコピーするためのC標準ライブラリ関数です。
(dest, "Hello");
関数`strcpy`の引数で、`dest`がコピー先のバッファ、`"Hello"`がコピー元の文字列です。
//
Include
<string.h>
to
use
strcpy
(strcpyを使用するためには、<string.h>をインクルードする必要があります。)
// Include <string.h>
コメントで、文字列操作関数を含むヘッダファイル`string.h`をインクルードする必要があることを示しています。
to use strcpy
`strcpy`を使用するために、という意味です。
strcpy(buffer,
user_input);
//
Potentially
unsafe
(bufferにユーザー入力をコピーします(潜在的に安全ではありません)。)
strcpy
文字列をコピーするための関数です。
(buffer, user_input);
`buffer`に`user_input`の内容をコピーしています。
// Potentially unsafe
コメントで、潜在的に安全ではないことを示しています。
2.
バッファオーバーフローを引き起こす可能性があるため、使用が推奨されない文字列コピー関数。
`strcpy`は、コピー先のバッファサイズを検証せずにコピーを実行するため、コピー元の文字列がコピー先のバッファよりも長い場合に、プログラムが予期せぬ動作をしたり、悪意のあるコードが実行されたりする「バッファオーバーフロー」の脆弱性を引き起こす可能性があります。そのため、セキュリティを重視する現代のプログラミングでは、`strncpy`や`strcpy_s`のような、より安全な代替関数が推奨されます。
char
buf[10];
strcpy(buf,
"A
very
very
long
string");
//
Causes
buffer
overflow
(10バイトの配列bufに「非常に長い文字列」をコピーすると、バッファオーバーフローが発生します。)
char buf[10];
10バイト分の文字を格納できる`buf`という名前の配列を宣言します。
strcpy(buf, "A very very long string");
`"A very very long string"`を`buf`にコピーしようとしています。これは`buf`のサイズを超えています。
// Causes buffer overflow
コメントで、バッファオーバーフローを引き起こすことを示しています。
strncpy(buf,
"Safe
string",
sizeof(buf)
-
1);
buf[sizeof(buf)
-
1]
=
'\0';
//
Safer
alternative
(strncpyを使用して、バッファサイズを超えないように文字列をコピーし、NULL終端を明示的に行います。これはより安全な代替手段です。)
strncpy(buf, "Safe string", sizeof(buf) - 1);
`buf`に`"Safe string"`を、`buf`のサイズから1バイトを引いた最大長でコピーします。
buf[sizeof(buf) - 1] = '\0';
`buf`の最後の文字位置にNULL終端文字を手動で追加し、文字列の安全性を確保します。
// Safer alternative
コメントで、より安全な代替手段であることを示しています。
Using
strcpy
without
bounds
checking
is
a
common
security
vulnerability.
(境界チェックなしでstrcpyを使用することは、一般的なセキュリティ上の脆弱性です。)
Using strcpy
`strcpy`を使用すること。
without bounds checking
境界チェックなしで、という意味です。
is a common security vulnerability.
一般的なセキュリティ上の脆弱性です。
関連
strncpy
strlcpy
strcpy_s
memcpy
buffer overflow
string manipulation
C programming