C语言库函数strncpy,strncat,strncmp函数的模拟实现

strncpy,strncat,strncmp函数的模拟实现

#include
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
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
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码差值


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部