#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
void * mymemset(void * src, char c, int n) {
assert(src != NULL);
char * p = (char*)src;
while (n--) {
*p = c;
p++;
}
return src;
}
void * mymemcopy(void *dst, void *src, size_t n) {
assert(dst != NULL && src != NULL);
if (src<dst && (char*)src + n>dst) {
char * s = (char*)src + n - 1;
char * d = (char *)dst + n - 1;
while (n--) {
*d = *s;
d--;
s--;
}
}
else {
char * s = (char *)src;;
char * d = (char *)dst;
while (n--) {
*d = *s;
d++;
s++;
}
}
return dst;
}
char * mystrcpy(char * dst, char *src) {
assert(dst != NULL && src != NULL);
size_t n = strlen(src);
if (src<dst && src + n>dst) {
char * d = dst + n;
*d-- = '\0';
src = src + n - 1;
while (n--) {
*d = *src;
d--;
src--;
}
}
else {
char * d = dst;
while ((*d++ = *src++) != 0);
}
return dst;
}
char * mystrncpy(char * dst, char *src, size_t n) {
assert(dst != NULL && src != NULL);
if (src<dst && src + n>dst) {
int m = strlen(src) < n ? strlen(src) : n;
char * d = dst + n;
*d-- = '\0';
src = src + m - 1;
while (m--) {
*d = *src;
d--;
src--;
}
}
else {
char * d = dst;
size_t i = 0;
while (i++ < n && (*d++ = *src++) != '\0');
if (*(d - 1) != '\0') *d = '\0';
}
return dst;
}
size_t mystrlen(const char *src) {
assert(src != NULL);
size_t ret = 0;
while (*src++ != '\0') {
ret++;
}
return ret;
}
int mystrcmp(const char *s1, const char * s2) {
assert(s1 != NULL && s2 != NULL);
while (s1&& s2 && *s1 == *s2) {
s1++;
s2++;
}
return *s1 - *s2;
}
char* mystrcat(char *dst, const char * src) {
char * d = dst;
while (*d != '\0') {
d++;
}
while ((*d++ = *src++) != '\0');
return dst;
}