1.介绍strncpy:把src指向的字符串的前n个字符拷贝到dest指向的空间(字符串)
头文件:#include<string.h>
char *strncpy(char *dest, const char *src, size_t n);
其中参数类型是char*和size_t
返回值值类型是char*型
演示:最基本的情况下
int main()
{
char arr1[] = "abcdef";
char arr2[10] = { 0 };
strncpy(arr2, arr1, 5);
printf("%s", arr2);
return 0;
}
结果:
当n的值超出arr1的长度时:
此时可见arr2拷贝了arr1的全部字符包括\0,注意:这里的\0不是strncpy库函数生成的,是复制过来的,那么arr1没有\0的情况如下:
由于arr1没有\0,导致越界访问。
知晓这些可以开始模拟strncpy
2.模拟strncpy
如下:
void My_Strncpy(char ch[], char arr[], int num)
{
int i = 0;
while (num)
{
ch[i] = arr[i];
i++;
num--;
}
printf("%s", ch);
}
int main()
{
char arr[] = { 'a','b','c' };//这里的被复制的字符串没有\0
char ch[100] = { 0 };
int pot = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
scanf("%d", &pot);
if (pot >= sz);
pot = sz;
My_Strncpy(ch, arr, pot);
return 0;
}
为了避免越界访问,在输入pot后与arr的长度进行比较。