strncpy,strncat,strncmp函数的模拟实现
#include<stdio.h>void my_strncpy(char* arr1,const char* arr2,int n){for(int i = 0;i<n;i++){*arr1++ = *arr2++;}*arr1 = '\0';;}int main(){char arr1[] = "abcdef*";char arr2[] = "abef";my_strncpy(arr1,arr2,3);printf("%s",arr1);return 0;}
(解析)
1.strncpy函数较strcpy函数多了一个大小的变量n,即我能指定拷贝几个字符,我自己说了算
2.变化就是加了一个循环控制n次,每一次拷贝一个字符,然后地址加一,不再将’\0’作为拷贝结束的标志
3.因为拷贝未涉及‘\0’,所以最后加上一个‘\0’为宜,避免拷贝完‘\0’也被替换
#include<stdio.h>void my_strncat(char* arr1,const char* arr2,int n){while(*arr1){arr1++;}for(int i = 0;i<n;i++){*arr1++ = *arr2++;}*arr1 = '\0';}int main(){char arr1[30] = "abcdef*";char arr2[30] = "abef";my_strncat(arr1,arr2,3);my_strncat(arr2,arr2,4);printf("%s\n",arr1);printf("%s\n",arr2);return 0;}
(解析)
1.strncat函数意思是我指定几个字符追加到一个字符串上去,可以实现一个字符串的自我叠加(strcat不行,因为‘\0’会在一开始被取代)
2.指定字符个数的思路仍然是循环控制
3.先找到要被加的字符串的‘\0‘位置,随后开始叠加n次,最后补上’\0‘
#include<stdio.h>int my_strncmp(const char* arr1,const char* arr2,int n){while(n--){if(*arr1 == *arr2){arr1++;arr2++;continue;}elsereturn (int)(*arr1 - *arr2);}return 0;}int main(){char arr1[] = "abcdef*";char arr2[] = "abef";printf("%d\n",my_strncmp(arr1,arr2,2));printf("%d\n",my_strncmp(arr1,arr2,3));return 0;}
(解析)
1.比较n个字符,用循环思想控制次数
2.如果字符相同,则地址一起++,比较下一个字符,如果不一样,跳出循环直接返回ASC码差值