C语言三个函数的模拟实现详解
目录
- 一、strcpy
- 二、模拟实现strcat
- 三、strcmp
- 总结:
一、strcpy
//模拟实现strcpy #include<stdio.h> #include<assert.h> char* 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<stdio.h> #include<assert.h> char* 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<stdio.h> #include<assert.h> int 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; }
总结:
多多实现库函数的模拟可以更好地认识指针。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
赞 (0)