首页 > 代码库 > 面试:C/C++常见库函数实现
面试:C/C++常见库函数实现
1. void *mymemcpy(void *dest, const void* src, size_t n);
内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
1 void *mymemcpy(void *dest, const void* src, size_t n) { 2 assert(dest != NULL && src != NULL); 3 4 //考虑内存重叠 5 if (src < dest && (char*) src + n > dest) { 6 7 //void*类型强制转换为char* 8 char* psrc = http://www.mamicode.com/(char*) src + n - 1; 9 char* pdst = (char*) dest + n - 1;10 11 while (n--) {12 *pdst-- = *psrc--;13 }14 } else {15 char* psrc = http://www.mamicode.com/(char*) src;16 char* pdst = (char*) dest;17 while (n--) {18 *pdst++ = *psrc++;19 }20 }21 return dest;22 }
2.void *memset(void *s, int ch, size_t n);
1 void* mymemset(void* s, int c, size_t n) {2 if (s == NULL) return NULL;3 char* ps = (char*) s;4 while (n--) {5 *ps++ = (char) c;6 }7 return s;8 }
3. char* mystrcpy(char* dest,const char* src);
1 char* mystrcpy(char* dest, const char* src) { 2 if (dest == NULL || src =http://www.mamicode.com/= NULL) return NULL; 3 4 int n = strlen(src); 5 //memory overlap 6 if (src < dest && src + n > dest) { 7 char* pdst = dest + n; 8 char* psrc = http://www.mamicode.com/const_cast<char*>(src) + n; 9 *pdst-- = *psrc--;10 while (n--) {11 *pdst-- = *psrc--;12 }13 } else {14 char* pdst = dest;15 while ((*pdst++ = *src++) != ‘\0‘)16 ;17 }18 return dest;19 }
4. char* mystrncpy(char* dest,char* src,size_t n);
1 char* mystrncpy(char* dest, char* src, size_t n) { 2 if (dest == NULL || src =http://www.mamicode.com/= NULL) 3 return NULL; 4 5 if (src < dest && src + n > dest) { 6 char* pdst = dest + n - 1; 7 char* psrc = http://www.mamicode.com/src + n - 1; 8 *(pdst + 1) = ‘\0‘; 9 while (n--) {10 *pdst-- = *psrc--;11 }12 } else {13 char* pdst = dest;14 while (n--) {15 *pdst++ = *src++;16 }17 *pdst = ‘\0‘;18 }19 return dest;20 }
5.char* mystrcat(char* dest,const char* src)
1 char* mystrcat(char* dest, const char* src) { 2 if (dest == NULL || src =http://www.mamicode.com/= NULL) 3 return NULL; 4 5 int n = strlen(src); 6 char* pdst = dest; 7 while (*pdst != ‘\0‘) { 8 pdst++; 9 }10 while (n--) {11 *pdst++ = *src++;12 }13 pdst = ‘\0‘;14 return dest;15 }
6.int mystrcmp(const char* s1,const char* s2)
1 int mystrcmp(const char* s1, const char* s2) {2 assert(s1 != NULL && s2 != NULL);3 while (s1 && s2 && *s1 == *s2) {4 s1++;5 s2++;6 }7 return *s1 - *s2;8 }
7.int mystrlen(const char* s)
1 int mystrlen(const char* s) {2 assert(s != NULL);3 int len = 0;4 while (*s++ != ‘\0‘) {5 len++;6 }7 return len;8 }
面试:C/C++常见库函数实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。