#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char*dest, const char* src){
assert(src != NULL);
char* ret = dest;
while (*dest!='\0'){
*dest=*src;
dest++;
src++;
}
return ret;
}
char* my_strcat(char* dest, const char* src){
char* ret = dest;
assert(dest != NULL);
assert(src != NULL);
while (*dest){
dest++;
}
while (*dest++ = *src++){
;
}
return ret;
}
const char* my_strstr(const char* src, const char* sub){
assert(src&&sub);
const char* srci = src;
const char* subi = sub;
while (*srci != '\0'){
while (*srci == *subi && *subi != '\0'){
++srci;
++subi;
}
if (*subi == '\0'){
return src;
}
else{
subi = sub;
++src;
srci = src;
}
}
return NULL;
}
char* my_strchr(const char* dst, char c){
while ((*dst != '\0')&&(*dst != c)){
dst++;
if (*dst == c){
return dst;
}
}
return NULL;
}
int my_strcmp(const char* dest, const char* src){
int ret = 0;
assert(dest != NULL);
assert(src != NULL);
while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && *dest){
++dest;
++src;
}
if (ret > 0){
return 1;
}
else if (ret < 0){
return -1;
}
return (ret);
}
void* my_memcpy(void* dst, const void* src, size_t num){
char* str_dst = (char*)dst;
char* str_src = (char*)src;
while (num--){
*str_dst = *str_src;
str_dst++;
str_src++;
}
return dst;
}
void* my_memcpy2(void* dest, const void* src, size_t count){
char *ret = (char *)dest;
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
return ret;
}
void* my_memmove(void* dst, void* src, size_t n){
char* str_dst = (char*)dst;
char* str_src = (char*)src;
if (str_dst <= str_src || str_dst >= str_src + n){
while (n--){
*str_dst++ = *str_src++;
}
}
else{
str_dst = str_dst + n - 1;
str_src = str_src + n - 1;
while (n--){
*str_dst-- = *str_src--;
}
}
return dst;
}
int main(){
char p1[] = "abcde";
char p2[] = "cdeab";
char buf[] = "hello world";
printf("%s\n", my_strcpy(p2, p1));
printf("%s\n", my_memcpy2(p2, p1,6));
printf("%s\n", my_memmove(p2, p1, 6));
printf("%s\n", my_strcat(p2, p1));
printf("%d\n", my_strcmp(p2, p1));
printf("%s\n", my_strchr(buf, 'o'));
int a[12];
int b[] = { 1, 2, 3 };
my_memmove(a, b, 12);
for (int i = 0; i < 12; ++i){
printf("%d\n",a[i]);
}
system("pause");
return 0;
}