C关于字符串操作的库函数实现总结

常用C关于字符串操作的库函数实现:

//获取字符串长度
int Strlen(const char* s) {
    assert(s != NULL);
    int len = 0;
    while (*s++ != '') {
        len++;
    }
    return len;
}

//将src字符串复制到dest中
char* Strcpy(char* dest, const char* src) {
    assert(dest != NULL && src != NULL);
    char* p = dest;
    while ((*dest++ = *src++) != '');
    return dest;
}

//将src字符串前n个字符复制到dest中
char* Strncpy(char* dest, const char* src, int n) {
    assert(dest != NULL && src != NULL);
    char* p = dest;
    int m = 0;
    while (*p++ != '') {
        m++;
    }
    if (n > m)
        return NULL;

    p = dest;
    while (n--) {
        *p++ = *src++;
    }
    return dest;
}

//比较两个字符串大小
int Strcmp(const char* str1, const char* str2) {
    assert(str1 != NULL && str2 != NULL);
    while (*str1 && *str2 && *str1 == *str2) {
        str1++;
        str2++;
    }
    return *str1 - *str2;
}

//将src字符串连接到dest字符串后面
char* Strcat(char* dest, const char* src) {
    assert(dest != NULL && src != NULL);
    char* p = dest;
    while (*p++ != '');
    p--;
    while ((*p++ = *src++) != '');
    return dest;
}


/*
* memcpy函数用于资源内存(src指向的内存)拷贝到目标内存(dest指向的内存);拷贝的个数size
* 用法::(1)可以拷贝任何类型的对象,因为函数的参数类型是void* ,由于函数拷贝是一个字节一个
* 字节拷贝,实际操作是将void*强制转换成了char*,这样才能保证每一次加一个指针
*/
void Memcpy(char* dest, const char* src, size_t n) {
    assert(dest != NULL && src != NULL);
    char* pDest = (char*)dest;
    const char *pSrc = (const char*)src;
    if (pDest <= pSrc || pSrc + n <= pDest) {
        while (n--) {
            *pDest++ = *pSrc++;
        }
    } else {
        pDest += n - 1;
        pSrc += n - 1;
        while (n--) {
            *pDest-- = *pSrc--;
        }
    }
}

//memset内部实现memset(void*s,int ch,size_t n)
/*将dest所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值,返回s*/
void* Memset(void* dest, int ch, size_t n) {
    assert(dest != NULL && n >= 0);
    char* p = (char*)dest;
    while (n--) {
        *p++ = (char)ch;
    }
    return dest;
}
原文地址:https://www.cnblogs.com/evenleee/p/10397148.html