一、strncpy函数原型
char *strncpy(char *destinin, char *source, int maxlen);
destinin:表示复制的目标字符数组;
source:表示复制的源字符数组;
maxlen:表示想要复制的字符串长度
二、strncpy函数的使用
1.当想要复制的字符个数大于被复制的源字符数组长度时:
(1)代码
int main()
{
char arr1[] = "abcdefg";
char arr2[] = "xyz";
int len = strlen(arr2);
strncpy(arr1, arr2,5);
printf("%s", arr1);
return 0;
}
(2)结果:
(3)结果的解释:
因为想要复制的长度大于源字符串长度,所以在源字符串内容结束时,复制还没结束,接着将源字符串末尾的 '\0' 也复制过去了,而'\0' 是字符串终止标志,所以复制就立即停止了。所以复制结果只有3个字符,小于想复制的字符长度
2.当想要复制的字符个数小于被复制的源字符数组长度时:
(1)代码
int main()
{
char arr1[] = "abcdefg";
char arr2[] = "xyz";
int len = strlen(arr2);
strncpy(arr1, arr2,2);
printf("%s", arr1);
return 0;
}
(2)结果:
(3)结果的解释:
因为想要复制的长度小于源字符串长度,所以在复制结束时,还没到达源字符串的'\0',
所以,复制结果是只是改变了目标字符串的前2个字符,后面的不变
三、模拟实现
1.模拟函数原型
char* my_strncpy(char* dest, char* src, int n,int len)//n为想复制的个数,len 为源字符串的长度
dest:表示复制的目标字符数组;
src:表示复制的源字符数组;
n:表示想要复制的字符串长度
len: 表示 源字符串的长度
2.代码
char* my_strncpy(char* dest, char* src, int n,int len)//n为想复制的个数,len 为源字符串的长度
{
int i;
char* start = dest;
if (n >= len)//只有arr2的内容
{
for (i = 0; i < len; i++)//因为len更短,所以是复制len个字符
{
*(dest+i) = *(src+i);
}
*(dest + len) = '\0'; //添加字符串终止标志。相当于将'\0’也复制过去
}
else
{
for (i = 0; i < n; i++) //因为时n更短,所以是复制n个字符
{
*(dest + i) = *(src + i);
}
}
return start;
}
3.结果展示:
(1) 当想要复制的字符个数大于被复制的源字符数组长度时
(2) 当想要复制的字符个数小于被复制的源字符数组长度时