strncpy详解及模拟实现

strncpy的介绍

RoutineRequired HeaderCompatibility
strncpy<string.h>ANSI, Win 95, Win NT

函数原型:

char *strncpy( char *strDest, const char *strSource, size_t count );

功能介绍:

strncpy函数将strSource的初始字符复制到strDest并返回strDest的地址,如果count小于或等于strSource的长度,则不会将空字符自动附加到复制的字符串中。如果count大于strSource的长度,则目标字符串将填充长度count以内的空字符。如果源字符串和目标字符串重叠,strncpy的行为是未定义的。

1. count小于等于strsource的长度

#include<stdio.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "hello bit";
	strncpy(arr1, arr2, 4);
}

由监视窗口可以看出,当count小于或等于strSource的长度时,不会将空字符自动附加到复制的字符串中。

2.count大于strSource的长度

#include<stdio.h>
int main()
{
	char arr1[] = "abcdefghi";
	char arr2[] = "bit";
	strncpy(arr1, arr2, 6);
}

由监视窗口看出,当count大于strSouce长度时,拷贝完源字符串后,在目标字符串的后面追加’\0’ ,直到count个.

strncpy的模拟实现

#include<stdio.h>
char* my_strncpy(char* dest, const char* src,size_t count)
{
	char* start = dest; // 记录目标字符串起始位置
	while (count && (*dest++ = *src++)) // 拷贝字符串
	{
		count--;
	}
	if (count) // 当count大于src的长度时,将补充空字符
	{
		while (--count)
		{
			*dest++ = '\0';
		}
	}
	return start;
}
int main()
{
	char arr1[] = "abcdefghi";
	char arr2[] = "bit";
	my_strncpy(arr1, arr2, 6);
	printf("%s\n", arr1);
}

比较难理解的可能是这段代码:

*dest++ = *src++

将*src的值赋值给 *dest,然后src++,dest++,这样循环下去,直到src指向空字符.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值