char* strcpy(char* dest, const char* src) { assert(dest != NULL && stc != NULL);//1.判断指针是否合法 char* temp = dest; //2.保存最终返回的dest头指针 while ((*temp++ = *src++) != '\0'){}//判断拷贝终止条件 return dest; }
1.2、char* mystrncpy(char* dest, const char* src, int len) //与strcpy相似,如果复制了n个字符,则终止。
char* mystrncpy(char* dest, const char* src, int len) { assert(dest != NULL && stc != NULL);//1.判断指针是否合法 char* temp = dest; //2.保存最终返回的dest头指针 int i = 0; //计数 while (i++ < len && (*temp++ = *src++) != '\0'){}//3.判断拷贝终止条件(注意两个判断条件不能互换,否则多拷贝一个字符) if (*(--temp) != '\0') *temp = '\0'; //4.如果src.size>len,导致最后一个字符不是'\0',需要补充。 return dest; }
1.3、void* mymemcpy(void* dest, void* src, int len) //字节复制,只有一个终止条件
void* memcpy(void* dest, void* src, int len) { int i = 0; //将void*转换成char*,一次移动一个字符 char* tempdest = (char*)dest; char* tempsrc = (char*)src; //判断dest和src重叠问题 if (tempdest < tempsrc || tempdest >(tempsrc + len - 1))//不重叠时,从左向右拷贝 { while (i < len) { *tempdest++ = *tempsrc++; i++; } } else//重叠时,从右向左拷贝 { tempdest += len; tempsrc += len; i = len; while (i > 0) { *tempdest-- = *tempsrc--; i--; } } return dest; }
1.4、void *memset(void *s, int ch, size_t n)//将s所指的地址后n个字节初始化为ch