#include<iostream>
#include<assert.h>
using namespace std;
void my_memcpy(char *dst, const char *src, int len){
assert(dst != NULL && src != NULL && len>=0);
if(dst<=src || dst>=src+len){ //判斷記憶體重疊
while(len--){
*dst++ = *src++;
}
}
else{
src = src+len-1;
dst = dst+len-1;
while(len--){
*dst-- = *src--;
}
}
}
char* my_strcpy(char *dst, const char *src){
assert(dst != NULL && src != NULL);
char *ret = dst;
while((*ret++ = *src++) != '\0');
return dst;
}
char *my_strcat(char *dst, const char *src){
char *ret = dst; //後文return ret,故不能放在assert斷言之後聲明ret
assert(dst != NULL && src != NULL);
while(*dst) dst++;
while(*src) *dst++ = *src++;
*dst = '\0';
return ret;
}
int my_strcmp(const char *str1, const char *str2){
assert(str1 != NULL && str2 != NULL);
while(*str1 && *str2 && (*str1 == *str2)){
str1++;
str2++;
}
return *str1-*str2;
}
int my_strlen(const char *src){
int len = 0;
assert(src != NULL);
while(*src++) len++;
return len;
}
int main(){
char src[10] = "fafafa";
char *dst = new char[20];
//my_memcpy(dst, src, 6);
my_strcpy(dst, src);
cout<<my_strcmp(dst, src)<<endl;
cout<<my_strlen(src)<<endl;
my_strcat(dst, src);
cout<<dst<<endl;
}