#include #include void *memset(void *p, int c, size_t n) { char *cp = p; for (size_t i = 0; i < n; i++) cp[i] = c; return p; } void *memcpy(void *dst, const void *src, size_t n) { char *a = dst; const char *b = src; for (size_t i = 0; i < n; i++) a[i] = b[i]; return dst; } size_t strlen(const char *s) { char *s2; for (s2 = s; *s2; ++s2); return (s2 - s); } // https://aticleworld.com/memcmp-in-c/ int memcmp(const void *s1, const void *s2, int len) { unsigned char *p = (unsigned char *)s1; unsigned char *q = (unsigned char *)s2; int charCompareStatus = 0; //If both pointer pointing same memory block if (s1 == s2) { return charCompareStatus; } while (len > 0) { if (*p != *q) { //compare the mismatching character charCompareStatus = (*p >*q)?1:-1; break; } len--; p++; q++; } return charCompareStatus; } int strcmp(const char *a, const char *b) { while (*a && (*a == *b)) { a++, b++; } return (unsigned char)*a - (unsigned char)*b; } size_t strcspn(const char *s, const char *reject) { size_t count = 0; for (; *s != '\0'; ++s) { const char *r = reject; while (*r != '\0') { if (*s == *r) { return count; } r++; } count++; } return count; } size_t strspn(const char *s, const char *accept) { size_t count = 0; for (; *s != '\0'; ++s) { const char *a = accept; int matched = 0; while (*a != '\0') { if (*s == *a) { matched = 1; break; } a++; } if (!matched) { return count; } count++; } return count; } char *strcpy(char *dest, const char *src) { char *d = dest; while ((*d++ = *src++) != '\0') { ; } return dest; } char *strchr(const char *s, int c) { char ch = (char)c; while (*s != '\0') { if (*s == ch) { return (char *)s; } s++; } if (ch == '\0') { return (char *)s; } return NULL; } char *strstr(const char *str, const char *substring) { const char *a; const char *b; b = substring; if (*b == 0) { return (char *) str; } for ( ; *str != 0; str += 1) { if (*str != *b) { continue; } a = str; while (1) { if (*b == 0) { return (char *) str; } if (*a++ != *b++) { break; } } b = substring; } return NULL; } char *strcat(char *dest, const char *src) { size_t i, j; for(i = 0; dest[i] != '\0'; i++); for(j = 0; src[j] != '\0'; j++) { dest[i+j] = src[j]; } dest[i+j] = '\0'; return dest; } int strncmp( const char * s1, const char * s2, size_t n ) { while ( n && *s1 && ( *s1 == *s2 ) ) { ++s1; ++s2; --n; } if ( n == 0 ) { return 0; } else { return ( *(unsigned char *)s1 - *(unsigned char *)s2 ); } } void strncpy( char* _dst, const char* _src, size_t _n ) { size_t i = 0; while(i++ != _n && (*_dst++ = *_src++)); }