C语言三个函数的模拟实现详解
目录
- 一、strcpy
- 二、模拟实现strcat
- 三、strcmp
- 总结:
一、strcpy
//模拟实现strcpy#include#includechar* my_strcpy(char*dest, char*str){ assert(dest && str); char* tmp = dest; while (*str != '\0') {*dest = *str; dest++; str++; } *dest = '\0'; return tmp; }int main(){ char arr1[20] = "xxxxxxxxxxxxxxx"; char arr2[] = "study hard!"; my_strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
文章图片
二、模拟实现strcat 思路:先找到目标字符串的\0位置,然后停下
用两个指针扫描目标字符串和源字符串,并赋值
在源字符串添加完成后,加上’\0‘
//模拟实现strcat//字符串追加#include#includechar* my_strcat(char* dest, const char* str){ assert(dest && str); char* tmp = dest; //找到目标的尾巴 while (*dest != '\0') {dest++; } //链接字符串 while (*dest++ = *str++) {; } *dest = '\0'; return tmp; }int main(){ char arr1[20] = "hello"; char arr2[] = " world!"; my_strcat(arr1, arr2); printf("%s\n", arr1); return 0; }
文章图片
三、strcmp 要注意,strcmp不是比较两字符串的长度,而是逐位比较字符的ASCII码值
//模拟实现strcmp 返回的不是1 -1,而是正数,负数#include#includeint my_strcmp(const char* str1, const char* str2){ assert(str1&&str2); while (*str1 == *str2) {if (*str1 == '\0'){return 0; }str1++; str2++; } return *str1 - *str2; }int main(){ char arr1[] = "abcdef"; char arr2[] = "abcder"; int ret=my_strcmp(arr1, arr2); if (ret < 0) {printf("<\n"); } else if (ret == 0) {printf("=\n"); } else {printf(">\n"); } return 0; }
文章图片
总结: 多多实现库函数的模拟可以更好地认识指针。
【C语言三个函数的模拟实现详解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- C语言中操作字符串的函数详解
- C语言的数组指针与函数指针详解
- C语言中dlopen和dlsym的使用方式详解
- c++语言入门一本通|【信息学奥赛】2054(【例3.4】适合晨练(C++))
- 简单代码|OI 守望者的逃离 c语言简洁注释 逻辑清晰
- C语言|【C语言】字符函数&字符串函数&内存函数(上)[进阶篇_复习专用]
- C语言|【C语言】字符函数&字符串函数&内存函数(下)[进阶篇_复习专用]
- 寒假刷题特辑|【第四章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】
- 编程语言|20天拿到美团快手小米搜狐跟谁学offer
- go语言protoc编译问题-protoc-gen-go: unable to determine Go import path for “searchnode.proto“