strcat
char *my_strcat(char *dest, const char *src)
{
char *result = NULL;
assert(src != NULL);
assert(dest != NULL);
result = dest;
while (*dest != '\0')
{
dest++;
}
while (*src != '\0')
{
*(dest++) = *(src++);
}
*dest = '\0';
return result;
}
strcpy
char *my_strcpy(char *dest, const char *src)
{
char *result = NULL;
assert(src != NULL);
assert(dest != NULL);
result = dest;
while (*src != '\0')
{
*(dest++) = *(src++);
}
*dest = '\0';
return result;
}
strncpy
char *my_strncpy(char *dest, const char *src, size_t n)
{
char *result = NULL;
size_t i = 0;
assert(src != NULL);
assert(dest != NULL);
result = dest;
for (i = 0; i < n && *src != '\0'; i++)
{
*(dest++) = *(src++);
}
for (; i < n; i++)
{
*(dest++) = '\0';
}
*dest = '\0';
return result;
}
strstr
char *my_strstr(const char *haystack, const char *needle)
{
const char *tmp_str = haystack;
assert(haystack != NULL);
assert(needle != NULL);
if (*needle == '\0')
{
return (char *)haystack;
}
while (*tmp_str != '\0')
{
const char *s1 = tmp_str;
const char *s2 = needle;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char *)tmp_str;
}
tmp_str++;
}
return NULL;
}
strcmp
int my_strcmp(const char *s1, const char *s2)
{
assert(s1 != NULL);
assert(s2 != NULL);
while (*s1 != '\0' && s2 != '\0')
{
if (*s1 != *s2)
{
return *s1 - *s2;
}
s1++;
s2++;
}
if (*s1 != *s2)
{
return *s1 - *s2;
}
return 0;
}
strncmp
int my_strncmp(const char *s1, const char *s2, size_t n)
{
size_t i = 0;
assert(s1 != NULL);
assert(s2 != NULL);
for (i = 0; i < n; i++)
{
if (*s1 != '\0' && s2 != '\0')
{
return *s1 - *s2;
}
if (*s1 != *s2)
{
return *s1 - *s2;
}
s1++;
s2++;
}
return 0;
}
memcpy
void *my_memcpy(void *dest, const void *src, size_t n)
{
size_t i = 0;
unsigned char *res = (unsigned char*)dest;
const unsigned char *tmp_src = (const unsigned char*)src;
assert(dest != NULL);
assert(src != NULL);
for (i = 0; i < n; i++)
{
res[i] = tmp_src[i];
}
return res;
}
memcmp
int my_memcmp(const void *s1, const void *s2, size_t n)
{
size_t i = 0;
const unsigned char *tmp_s1 = (const unsigned char*)s1;
const unsigned char *tmp_s2 = (const unsigned char*)s2;
assert(s1 != NULL);
assert(s2 != NULL);
for (i = 0; i < n; i++)
{
if (*tmp_s1 != *tmp_s2)
{
return *tmp_s1 - *tmp_s2;
}
tmp_s1++;
tmp_s2++;
}
return 0;
}
memmove
void *my_memmove(void *dest, const void *src, size_t n)
{
size_t i = 0;
unsigned char *d = (unsigned char*)dest;
const unsigned char *s = (const unsigned char*)src;
assert(dest != NULL);
assert(src != NULL);
if (d > s)
{
for (i = 0; i < n; i++)
{
d[i] = s[i];
}
}
else if (d < s)
{
for (i = n; i > 0; i--)
{
d[i - 1] = s[i - 1];
}
}
return dest;
}