字符函数和字符串函数:
求字符串长度:strlen
长度不受限制的字符串函数:strcpy.strcat.strcmp
长度受限制的字符串函数介绍:strncpy.strncat.strncmp
字符串查找:strstr.strtok
错误信息报告:strerror
字符操作
内存操作函数:memcpy.memmove.memset.memcmp
库函数的模拟实现:
int My_strlen(const char* str) {
int count = 0;
while (*str) {
count++;
str++;
}
return count;
}
char* My_strcpy(char* dest,const char* str) {
char *tmp = dest;
while (*dest++ = *str++);
return tmp;
}
char* My_strcat(char* dest, const char*src) {
char* ret = dest;
while (*dest) {
dest++;
}
while (*dest++ = *src++) {
;
}
return ret;
}
char* My_strstr(const char* str1, const char* str2) {
assert(str1);
assert(str2);
char* cp = (char*)str1;
const char* substr = (char*)str2;
char* s1 = NULL;
if (*str2 == '\0') {
return NULL;
}
while (*cp) {
s1 = cp;
substr = str2;
while (*s1 && *substr && (*s1 == *substr)) {
s1++;
substr++;
}
if (*substr == '\0') {
return cp;
}
cp++;
}
return 0;
}
int My_strcmp(const char* str1, const char*str2) {
int ret = 0;
assert(str1 != NULL);
assert(str2 != NULL);
while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2) {
++str1, ++str2;
}
if (ret < 0) {
ret = -1;
}
else if (ret > 0) {
ret = 1;
}
return ret;
}
void* Memcpy(void* dst, const void* src, size_t count) {
void* ret = dst;
assert(dst);
assert(src);
while (count--) {
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return (ret);
}
void * memmove ( void * dst, const void * src, size_t count)
{
void * ret = dst;
if (dst <= src || (char *)dst >= ((char *)src + count)) {
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
}
else {
dst = (char *)dst + count - 1;
src = (char *)src + count - 1;
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
}
}
return (ret);