C语言strncpy函数详解及其模拟实现

本文详细介绍了C语言内置函数strncpy的使用,对比了它与strcpy的区别。strncpy函数允许指定要复制的字符数,提高了灵活性。文章通过示例展示了当源字符串长度大于等于或小于指定复制数时的不同处理方式,并提供了模拟实现strncpy功能的代码。在main函数中,演示了如何使用自定义的my_strncpy函数进行字符串复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 char * strncpy ( char * destination, const char * source, size_t num );

strncpy函数是C语言中的内置函数之一,相较于strcpy函数,他使用更加灵活,功能更加强大。

strncpy共有三个参数,分别是字符串目的地,字符串源头,以及选择copy的字符数目

strncpy情况与strcpy基本保持一致,但源头数据长度与copy字符的数目会产生一些问题:

当字符串源头的长度大于等于copy数目时,根据字符数目照常复制即可;

当字符串源头的长度小于copy的数目时,剩下几个copy数目,就在字符串目的地后加几个‘\0'。

下图为两种情况的演示:


模拟实现:

基于上面说到的strncpy两种情况,进行函数的模拟实现:

char* my_strncpy(char* dest, const char* src, int num)
{
	char* tmp = dest;
	while (num && (*dest++ = *src++))
	{
		num--;
	}
	if (num)
	{
		while (num--)
		{
			*dest++ = '\0';
		}
	}
	return tmp;
}

int main()
{
	int num = 0;
	char arr1[10] = { '\0' };
	char arr2[10] = { '\0' };
	printf("input the dest:>\n");
	gets(arr1);
	printf("input the scr:>\n");
	gets(arr2);
	printf("input the copy num:>");
	scanf("%d", &num);
	char* ret = my_strncpy(arr1, arr2, num);
	printf("%s\n", ret);
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值