OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / LDP_man-pages / release / man3 / strcpy.3
index 8876bc6..f26db63 100644 (file)
@@ -42,9 +42,9 @@
 .\" Updated 2007-07-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.58
 .\"
 .TH STRCPY 3  2010-09-20 "GNU" "Linux Programmer's Manual"
-.SH Ì¾Á°
-strcpy, strncpy \- Ê¸»úÎó¤ò¥³¥Ô¡¼¤¹¤ë
-.SH ½ñ¼°
+.SH 名前
+strcpy, strncpy \- 文字列をコピーする
+.SH 書式
 .nf
 .B #include <string.h>
 .sp
@@ -52,32 +52,32 @@ strcpy, strncpy \- ʸ
 .sp
 .BI "char *strncpy(char *" dest ", const char *" src ", size_t " n );
 .fi
-.SH ÀâÌÀ
+.SH 説明
 .BR strcpy ()
-´Ø¿ô¤Ï
-\fIsrc\fP ¤¬»Ø¤¹Ê¸»úÎó¤òËöÈø¤Î¥Ì¥ë¥Ð¥¤¥È (\(aq\\0\(aq) ¤â´Þ¤á¤Æ
-\fIdest\fP ¤¬»Ø¤¹¥Ð¥Ã¥Õ¥¡¤Ë¥³¥Ô¡¼¤¹¤ë¡£
-Æó¤Ä¤Îʸ»úÎó¤Ï½Å¤Ê¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¼õ¤±Â¦¤Îʸ»úÎó \fIdest\fP ¤Ï
-¥³¥Ô¡¼¤ò¼õ¤±¼è¤ë¤Î¤Ë½½Ê¬¤ÊÂ礭¤µ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+関数は
+\fIsrc\fP が指す文字列を末尾のヌルバイト (\(aq\\0\(aq) も含めて
+\fIdest\fP が指すバッファにコピーする。
+二つの文字列は重なってはならない。受け側の文字列 \fIdest\fP は
+コピーを受け取るのに十分な大きさでなければならない。
 .PP
 .BR strncpy ()
-´Ø¿ô¤âƱÍͤÀ¤¬¡¢
-\fIsrc\fP ¤Î¤¦¤ÁºÇÂç¤Ç¤â \fIn\fP ¥Ð¥¤¥È¤·¤«¥³¥Ô¡¼¤µ¤ì¤Ê¤¤ÅÀ¤¬°Û¤Ê¤ë¡£
-.BR ·Ù¹ð :
-\fIsrc\fP ¤ÎºÇ½é¤Î \fIn\fP ¥Ð¥¤¥È¤ÎÃæ¤Ë¥Ì¥ë¥Ð¥¤¥È¤¬¤Ê¤¤¾ì¹ç¡¢
-\fIdest\fP ¤Ë³ÊǼ¤µ¤ì¤ëʸ»úÎó¤Ï¥Ì¥ë¤Ç½ªÃ¼¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¡£
+関数も同様だが、
+\fIsrc\fP のうち最大でも \fIn\fP バイトしかコピーされない点が異なる。
+.BR 警告 :
+\fIsrc\fP の最初の \fIn\fP バイトの中にヌルバイトがない場合、
+\fIdest\fP に格納される文字列はヌルで終端されないことになる。
 .PP
 .I src
-¤ÎŤµ¤¬
+の長さが
 .I n
-¤è¤ê¤âû¤¤¾ì¹ç¡¢
+よりも短い場合、
 .BR strncpy ()
-¤Ï
+は
 .I dest
-¤Î»Ä¤ê¤ò¥Ì¥ë¥Ð¥¤¥È¤ÇËä¤á¤ë¡£
+の残りをヌルバイトで埋める。
 .PP
 .BR strncpy ()
-¤Î´Êñ¤Ê¼ÂÁõ¤Ï°Ê²¼¤Î¤è¤¦¤Ê´¶¤¸¤Ç¤¢¤í¤¦:
+の簡単な実装は以下のような感じであろう:
 .in +4n
 .nf
 
@@ -95,28 +95,28 @@ strncpy(char *dest, const char *src, size_t n)
 }
 .fi
 .in
-.SH ÊÖ¤êÃÍ
+.SH 返り値
 .BR strcpy ()
-´Ø¿ô¤È
+関数と
 .BR strncpy ()
-´Ø¿ô¤Ï
-¼õ¤±Â¦¤Îʸ»úÎó\fIdest\fP¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
-.SH ½àµò
+関数は
+受け側の文字列\fIdest\fPへのポインタを返す。
+.SH 準拠
 SVr4, 4.3BSD, C89, C99.
-.SH Ãí°Õ
+.SH 注意
 .BR strncpy ()
-¤Ï¸úΨŪ¤Ç¤Ê¤¯´Ö°ã¤¤¤òµ¯¤³¤·¤ä¤¹¤¤¤È¹Í¤¨¤ë¥×¥í¥°¥é¥Þ¤â¤¤¤ë¤À¤í¤¦¡£
-¥×¥í¥°¥é¥Þ¤¬ \fIdest\fP ¤ÎÂ礭¤µ¤¬ \fIsrc\fP ¤ÎŤµ¤è¤ê¤â
-Â礭¤¤¤³¤È¤òÃΤäƤ¤¤ë (¤Ä¤Þ¤ê¡¢¤½¤Î¤³¤È¤ò¥Á¥§¥Ã¥¯¤¹¤ë¥³¡¼¥É¤ò
-½ñ¤¤¤Æ¤¤¤ë) ¾ì¹ç¤Ï¡¢
+は効率的でなく間違いを起こしやすいと考えるプログラマもいるだろう。
+プログラマが \fIdest\fP の大きさが \fIsrc\fP の長さよりも
+大きいことを知っている (つまり、そのことをチェックするコードを
+書いている) 場合は、
 .B strcpy()
-¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£
+を使うことができる。
 
-\fIsrc\fP ¤ÎºÇ½é¤Î \fIn\fP Ê¸»ú¤Ë½ªÃ¼¤Î¥Ì¥ë¥Ð¥¤¥È¤¬¤Ê¤¤¾ì¹ç¡¢
+\fIsrc\fP の最初の \fIn\fP 文字に終端のヌルバイトがない場合、
 .BR strncpy ()
-¤Ï \fIdest\fP ¤Ë½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎó¤òÀ¸À®¤¹¤ë¡£
-¥×¥í¥°¥é¥Þ¤Ï´Ö°ã¤¤¤òËɻߤ¹¤ë¤¿¤á¤Ë¡¢
-°Ê²¼¤Î¤è¤¦¤Ë¶¯À©Åª¤Ë½ªÃ¼¤ò¹Ô¤¦¤³¤È¤¬¤è¤¯¤¢¤ë¡£
+は \fIdest\fP に終端されていない文字列を生成する。
+プログラマは間違いを防止するために、
+以下のように強制的に終端を行うことがよくある。
 .in +4n
 .nf
 
@@ -125,18 +125,18 @@ if (n > 0)
     buf[n \- 1]= \(aq\\0\(aq;
 .fi
 .in
-.SH ¥Ð¥°
+.SH ã\83\90ã\82°
 .BR strcpy ()
-¤Î¼õ¤±Â¦¤Îʸ»úÎ󤬽½Ê¬¤ÊÂ礭¤µ¤Ç¤Ê¤¤¾ì¹ç¡¢²¿¤¬µ¯¤³¤ë¤«¤ï¤«¤é¤Ê¤¤¡£
-¸ÇÄêĹʸ»úÎó¤ò°î¤ì¤µ¤»¤ë¤Î¤Ï¡¢¥Þ¥·¥ó¤ÎÀ©¸æ¤ò¾¸Ãæ¤Ë¼ý¤á¤ë¤¿¤á¤Ë
-¥¯¥é¥Ã¥«¡¼¤¬¹¥¤ó¤Ç»È¤¦¥Æ¥¯¥Ë¥Ã¥¯¤Ç¤¢¤ë¡£
-¥×¥í¥°¥é¥à¤Ç¥Ç¡¼¥¿¤ò¥Ð¥Ã¥Õ¥¡¤ËÆɤ߹þ¤ó¤À¤ê¥³¥Ô¡¼¤·¤¿¤ê¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢
-ɬ¤º¤Þ¤ººÇ½é¤Ë½½Ê¬¤ÊÂ礭¤µ¤¬¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ëɬÍפ¬¤¢¤ë¡£
-¥×¥í¥°¥é¥Þ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬ÉÔ²Äǽ¤À¤È¼¨¤»¤ë¾ì¹ç¤Ë¤Ï
-¤³¤Î¥Á¥§¥Ã¥¯¤ÏÉÔÍפ«¤â¤·¤ì¤Ê¤¤¤¬¡¢½½Ê¬Ãí°Õ¤¹¤ë¤³¤È¡£
-Ť¤´Ö¤Ë¤Ï¡¢ÉÔ²Äǽ¤À¤Ã¤¿¤³¤È¤¬²Äǽ¤Ë¤Ê¤ë¤è¤¦¤ÊÊýË¡¤Ç¥×¥í¥°¥é¥à¤¬
-Êѹ¹¤µ¤ì¤ë¤³¤È¤â¤¢¤ë¤«¤é¤À¡£
-.SH ´ØÏ¢¹àÌÜ
+の受け側の文字列が十分な大きさでない場合、何が起こるかわからない。
+固定長文字列を溢れさせるのは、マシンの制御を掌中に収めるために
+クラッカーが好んで使うテクニックである。
+プログラムでデータをバッファに読み込んだりコピーしたりする場合には、
+必ずまず最初に十分な大きさがあるかどうかをチェックする必要がある。
+プログラマがオーバーフローが不可能だと示せる場合には
+このチェックは不要かもしれないが、十分注意すること。
+長い間には、不可能だったことが可能になるような方法でプログラムが
+変更されることもあるからだ。
+.SH 関連項目
 .BR bcopy (3),
 .BR memccpy (3),
 .BR memcpy (3),