文字列複写関数memmove
ヘッダ #include "string.h"
形 式 void *memmove(void *s1, const void *s2, size_t n);
機 能 s2が指すオブジェクトの先頭n文字をs1が指すオブジェクトにコピーする。コピー元とコピー先が重なる場合も正しくコピーする。
返却値 s1の値を返す。
■実装例■
void *memmove(void *s1, const void *s2, size_t n)
{
char *p1 = (char *)s1;
const char *p2 = (const char *)s2;
if (p1 < p2 && p1 < p2 + n)
for (p1 += n, p2 += n; n > 0; n--) /* 後ろからコピー */
*p1-- = *p2--;
else
for ( ; n > 0; n--) /* 前からコピー */
*p1++ = *p2++;
return (s1);
}
■実装例■
#include
void *memmove(void *s1, const void *s2, size_t n)
{
register char *ss1 = s1;
register const char *ss2 = s2;
if (n != 0)
{
if (ss1 < ss2)
{
register const char *t = ss2 + n;
do
*ss1++ = *ss2++;
while (ss2 != t);
}
else if (ss1 > ss2)
{
register const char *t = ss2;
ss1 += n;
ss2 += n;
do
*--ss1 = *--ss2;
while (ss2 != t);
}
}
return s1;
}
[Quote]:http://bohyoh.com