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;
}
else
return (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码差值