strcpyのとmemcpyのは、彼らが次のような特徴があり、標準Cライブラリ関数です。
strcpyのは、文字列のコピーを提供します。strcpyのは、すなわち文字列のみをコピーするため、そして、それは文字列をコピーし、文字列がコピーされますターミネータ以外の唯一のものではありません。
strcpyの関数プロトタイプが知られている:するchar * strcpyの(するchar * DEST、CONSTのchar * SRC)
のmemcpyは、一般的なメモリの複製を提供します。コンテンツをコピーすることのmemcpyの必要性は限定されるものではなく、したがって、より汎用性の高いです。
無効 *のmemcpy( 無効 * DEST 、 constの ボイド *のSRC 、 size_tの COUNT )。
char
*
strcpy
(
char
* dest,
const
char
* src)
// 实现src到dest的复制
{
if
((src == NULL) || (dest == NULL))
//判断参数src和dest的有效性
{
return
NULL;
}
char
*strdest = dest;
//保存目标字符串的首地址
while
((*strDest++ = *strSrc++)!=
'\0'
);
//把src字符串的内容复制到dest下
return
strdest;
}
void
*
memcpy
(
void
*memTo,
const
void
*memFrom,
size_t
size)
{
if
((memTo == NULL) || (memFrom == NULL))
//memTo和memFrom必须有效
return
NULL;
char
*tempFrom = (
char
*)memFrom;
//保存memFrom首地址
char
*tempTo = (
char
*)memTo;
//保存memTo首地址
while
(size -- > 0)
//循环size次,复制memFrom的值到memTo中
*tempTo++ = *tempFrom++ ;
return
memTo;
}
|
strcpyのと、次の三つの側面との間にmemcpyの主な違い。
1、コンテンツの別のコピー。strcpyのは、専用の文字列をコピーし、任意のコンテンツはmemcpyを、例えば文字列、整数、構造などをコピーすることができます。
2コピーの異なる方法。strcpyの長さを指定する必要はありません、それは最後までコピーされたターミネータ「\ 0」であることを文字列に遭遇し、それがオーバーフローしやすいです。memcpyのコピーの長さはその三つのパラメータに応じて決定されます。
3、異なる目的のために。通常使用strcpyの他のタイプのデータをコピーする必要がありながら、文字列のコピーは、一般のmemcpyを使用する場合
編集者:ブログの庭:ボレバー