strcpy函数的实现
/* 下面是我写的strcpy的实现有好多错误,正确的实现见该函数的下面。 我已经注意到的问题: 1.src指针要加const进行限定。防止内部修改src指向的内容。 2.源字符串的末尾 '\0' 需要拷贝。 未注意到的问题: 1.需要返回目的指针dst, 2.为检查目的指针的有效性, 3.未考虑到内存重叠的问题。 */ int strcopy(char *dst, const char *src) { if (src == NULL) { return -1; } while(*src) { dst++ = src++; } *dst = '\0'; return 0; } /************************************************************************/ /* 总结: 1.不止要检查src的有效性(是否是空指针),还要检查dst的有效性。 2.返回值是char * 3.内存重叠情况的考虑 memcpy函数实现时考虑到了内存重叠的情况,可以完成指定大小的内存拷贝, 它的实现方式建议查看文章“卓越的教练是如何训练高手的?”,会获益良多 */ /************************************************************************// char *my_strcpy(char *dst, const char *src) { assert(dst != NULL); assert(src != NULL); char *ret = dst; memcpy(dst, src, strlen(src) + 1); return ret; } void * my_memcpy(void *dst, const void *src, unsigned int count) { assert(dst); assert(src); void * ret = dst; if(dst <= src || (char *)dst >= ((char *)src + count)) //源地址和目的地址不重叠,低字节向高字节拷贝 { while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } else //源地址和目的地址重叠,高字节向低字节拷贝 { dst = (char *)dst + count - 1; src = (char *)src + count - 1; while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst - 1; src = (char *)src - 1; } } return ret; }
网络上志同道合,我们一起学习网络安全,一起进步,QQ群:694839022