これは学習演習です。コピー操作が開始する前に成功するか失敗するかをユーザーに通知することで、memcpyを拡張しようとしています。私の最大の質問は次のとおりです。それぞれ100バイトのchar配列を2つ割り当て、各配列を参照する2つのポインターがある場合、コピーしている方向をどのように知ることができますか?最初の配列から2番目の配列にすべてをコピーする場合、ユーザーが元の配列を上書きしないようにするにはどうすればよいですか?
私の現在のソリューションは、宛先配列のサイズからのポインターの距離を比較します。間のサイズが私が言うよりも小さい場合、上書きが発生します。しかし、他の方向にコピーした場合はどうなりますか?私はちょっと混乱しています。
int memcpy2(void *target, void *source, size_t nbytes) {
char * ptr1 = (char *)target;
char * ptr2 = (char *)source;
int i, val;
val = abs(ptr1 - ptr2);
printf("%d, %d\n", val, nbytes + 0);
if (val > nbytes) {
for (i = 0; i < val; i++){
ptr1[i] = ptr2[i];
}
return 0; /*success */
}
return -1; /* error */
}
int main(int argc, char **argv){
char src [100] = "Copy this string to dst1";
char dst [20];
int p;
p = memcpy2(dst, src, sizeof(dst));
if (p == 0)
printf("The element\n'%s'\nwas copied to \n'%s'\nSuccesfully\n", src, dst);
else
printf("There was an error!!\n\nWhile attempting to copy the elements:\n '%s'\nto\n'%s', \n Memory was overlapping", src, dst);
return 0;
}