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);
}