常用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; }
原文地址:https://www.cnblogs.com/evenleee/p/10397148.html
时间: 2024-11-12 10:43:39