#include<string.h>
int main()
{
char arr1[30]={“kongchao”};
char arr2[30]={“hello world”};
strncpy(arr2,arr1,9);//拷贝九个是因为第九个字节是’\0’
printf(“%s”,arr2);
return 0;
}
strncpy函数模拟实现
#include<stdio.h>
#include<assert.h>
charstrncpy(chardest,char*src,int k)
{
assert(dest&&src);//判断非空
char*nb=dest;
while((*dest++ = *src++)&&(k–))
{
;
}
return nb;
}
int main()
{
char arr1[30]={“ni shi hei ma”};
char arr2[30]={“ni na nie”};
int k=0;
printf(“请输入你要拷贝的字节数”);//空格不算个数里面
scanf(“%d”,&k);
char*ret=my_strncpy(arr1,arr2,k);
printf(“%s”,arr1);//写ret也是一样的(都是arr1的首元素地址)
return 0;
}
2.strncat函数
函数的参数形式char*strncat(char*dest,const char*src,size_t num)
这个函数的形式简直和上面那个strncpy一模一样(他们的模拟实现也是基本一样的,
可以说strncpy是strncat的子集)注如果连接的个数大于源头个数,则还是连接源头个数。
函数使用:
#include<stdio.h>
#include<string.h>
int main()
{
char arr2[30]={“zhangdahou”};
char arr1[30]={“xiaoshihou”};
strncat(arr1,arr2,6);//连接6个
printf(“%s”,arr1);
return 0;
}
注意如果是这种strncat(arr1+n,arr2,8);其中n小于等于arr1的长度,则arr2还是连接到arr1后面,若大于则报错。
strncat函数模拟实现
#include<stdio.h>
#include<assert.h>
charmy_strncat(chardest,char*src)
{
assert(dest&&src);
char*ret=dest;//记下开始的位置
while(*++dest)
{
;
}
while(*dest++=*src++)
{
;
}
return ret;
}
int main()
{
char arr1[50]={"kong chao yao "};
char arr2[30]={“cheng wei da niu”};
char*kc= my_strncat(arr1,arr2);
printf(“%s”,kc);
return 0;
}
3.strncmp函数
函数的参数形式int strncmp ( const char * str1, const char * str2 ,size_t num);
size_t表示无符号整形,num表示字符比较的个数,返回类型str1>str2返回大于0的数
str1=str2返回0,str1<str2,返回小于0的数。(vs默认返回1 0 -1)。
函数的使用
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[4] = { “asdf” };
char arr2[4] = { “ase” };
int dd=strncmp(arr1, arr2, 3);//arr1和arr2比较
printf(“%d\n”, dd);//结果是小于0的随机数
return 0;
}
strncmp函数模拟实现
#include<stdio.h>
#include<assert.h>
int my_strncmp(charstr1, charstr2,int k)
{
assert(str1&&str2);
while ((*str1== *str2) && (k–))
{
str1++; str2++;
if ((*str1 == ‘\0’) || (k == 0))
{
return 0;
}
}
return *str1 - *str2;
}
int main()
{
char arr1[10] = { “abcdega” };
char arr2[10] = { “abcdeg” };
int kc = my_strncmp(arr1, arr2, 7);
printf(“%d\n”, kc);
return 0;
**最后的最后给个一键三连呗,**学有所成呀
最后
资料过多,篇幅有限
自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。
return *str1 - *str2;
}
int main()
{
char arr1[10] = { “abcdega” };
char arr2[10] = { “abcdeg” };
int kc = my_strncmp(arr1, arr2, 7);
printf(“%d\n”, kc);
return 0;
**最后的最后给个一键三连呗,**学有所成呀
最后
[外链图片转存中…(img-D9KF6Uxb-1718600564819)]
[外链图片转存中…(img-9RWH6rVA-1718600564820)]
资料过多,篇幅有限
自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。