以下のコードスニペットは、の実装を示していますmemmove()
。
void my_memmove(void* dest, const void* src, size_t size)
{
unsigned int i;
char* d = (char*)dest;
char* s = (char*)src;
if( s > d )
{
for( i = 0; s[i] && i < size; ++i )
d[i] = s[i];
}
else
for( i = size-1; d[i] && i >= 0; --i )
d[i] = s[i];
}
int main()
{
char my_str[] = "abcdefgh";
char str[] = "abcdefgh";
my_memmove(my_str+1, my_str, 4);
memmove(str+1, str, 4);
printf("%s %s\n", my_str, str);
return 0;
}
私は次のように出力を取得しています:
aabcdfgh
my_memmove()が正しく機能しないのはなぜですか(空の文字列を出力するようにmy_strを変更します)?