#include <stdio.h>
#include <assert.h>
char *strcpy(char *strDest, const char *strSrc) {
char *address=strDest;
assert((strDest!=NULL) && (strSrc!=NULL));
while(*strSrc!='\0') {
*strDest++=*strSrc++;
}
*strDest='\0';
return address;
}
char *strcat(char *strDest, const char *strSrc) {
char *address=strDest;
assert((strDest!=NULL) && (strSrc!=NULL));
while(*strDest!='\0') {
strDest++;
}
while(*strSrc!='\0') {
*strDest++ =* strSrc++;
}
*strDest='\0';
return address;
}
nt strcmp(const char *str1,const char *str2) {
assert((*str1!='\0' && *str2!='\0'));
while (*str1 && *str2 && *str1==*str2) {
str1++;
str2++;
}
return *str1-*str2;
}
int new_strlen(const char *str) {
assert(str != NULL);
int len = 0;
while (*str++ != '\0') {
++len;
}
return len;
}
void *memcpy(void *dst, void *src, size_t n) {
char *dp = (char*)dst;
char *sp = (char*)src;
assert((src!=0) && (dst!=0) && n>0);
while (n--) {
*(dp++) = *(sp++);
}
*dp='\0';
return dst;
}
void *new_memmove(void *dst, const void *src, int n) {
char *dp = (char *)dst;
char *sp = (char *)src;
assert((src != 0)&&(dst != 0) && (n > 0));
if (sp > dp || (sp+n) < dp) {
while(n--)
*(dp++)=*(sp++);
*dp='\0';
}else if (sp < dp){
sp += n;
dp += n;
*dp = '\0';
while(n--)
*(--dp) = *(--sp);
}
return dst;
}
int main() {
char dest[10];
char* src = "test!";
char* ret = strcpy(dest, src);
printf("Test strcpy ret is :%s\n", ret);
char cat1str[20] = "cat1";
char* cat2str = "cat2";
printf("Test strcat ret is :%s\n", strcat(cat1str, cat2str));
char *len = "len";
printf("Test strlen ret is :%d\n", new_strlen(len));
char mem_dest[20];
char* mem_src = "the src test memcpy";
printf("Test memcpy ret is :%s\n", memcpy(mem_dest, mem_src, 10));
char mv_dest[20];
char* mv_src = "the src test memmove";
printf("Test memmove ret is :%s\n", new_memmove(mv_dest, mv_src, 10));
}