C關於字符串操作的庫函數實現總結
阿新 • • 發佈:2019-02-18
個數 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關於字符串操作的庫函數實現總結