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

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

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

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

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

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

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

下图为两种情况的演示:

C语言strncpy函数详解及其模拟实现_第1张图片
C语言strncpy函数详解及其模拟实现_第2张图片

模拟实现:

基于上面说到的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);
}

你可能感兴趣的:(c语言)