1. 程式人生 > >C關於字符串操作的庫函數實現總結

C關於字符串操作的庫函數實現總結

個數 asc void 取字符 size_t == str1 sci 資源

常用C關於字符串操作的庫函數實現:

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

//將src字符串復制到dest中
char* Strcpy(char* dest, const char* src) {
    assert(dest != NULL && src != NULL);
    char* p = dest;
    while ((*dest++ = *src++) != 
\0); 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++ != \0) { 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++ != \0); p--; while ((*p++ = *src++) != \0); return dest; } /* * memcpy函數用於資源內存(src指向的內存)拷貝到目標內存(dest指向的內存);拷貝的個數size * 用法::(1)可以拷貝任何類型的對象,因為函數的參數類型是void* ,由於函數拷貝是一個字節一個 * 字節拷貝,實際操作是將void*強制轉換成了char*,這樣才能保證每一次加一個指針 */ void Memset(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; }

C關於字符串操作的庫函數實現總結