这是一个学习练习。我试图通过在复制操作开始之前通知用户复制操作将通过还是失败来增加 memcpy。我最大的问题是以下。如果我分配两个每个 100 字节的 char 数组,并且有两个指针引用每个数组,我怎么知道我在复制哪个方向?如果我将所有内容从第一个数组复制到第二个数组,如何确保用户不会覆盖原始数组?
我当前的解决方案比较了指针与目标数组大小的距离。如果两者之间的大小小于我所说的将发生覆盖。但是,如果它向另一个方向复制呢?我只是有点困惑。
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;
}