模拟实现strncpy

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的长度进行比较。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值