c语⾔中strncpy函数,函数原型和头⽂件
1、函数原型。
#include <stdio.h>
char *strncpy(char *s1, const char *s2, size_t n) //函数的返回值为指针,形参为两个指针(字符串数组,相当于指向第⼀个字符的指针)和n(赋值字符个数)。{
char *tmp = s1;  //将指针tmp声明为指针s1,指向字符串第⼀个字符的指针,
while(n)
{
if(!(*s1++ = *s2++))  // 将str2的元素依次赋值给str1,当str2⼩于n时,⼀直赋值到最后的null字符终⽌,当str2⼤于n时,复制n个元素。
break;  // 当str2的长度⼩于n时,此循环判断条件起作⽤
n--;  // 当n⼩于字符串str2的长度时,此时循环判断条件起作⽤
}
while(n--)  // 当str2⼩于n时,递减后n扔为正数,将字符串数组s1后依次复制n-str2长度个'\0'。
*s1++ = '\0';
return tmp;  // 函数返回指针,指向字符串str1第⼀个字符的指针。
}
int main(void)
{
char str1[128] = "abcdefg";
char str2[128] = "123456789";
size_t n;
printf("n = "); scanf("%u", &n);
printf("copy result: %s\n", strncpy(str1, str2, n));  // 函数实参为字符串数组的名称(相当于指向第⼀个元素的指针)和复制的字符个数n。
return0;
}
printf函数原型在什么头文件里↓
函数原型修改
#include <stdio.h>
char *strncpy(char *s1, const char *s2, size_t n) //函数的返回值为指针,形参为两个指针(字符串数组,相当于指向第⼀个字符的指针)和n(赋值字符个数)。{
char *tmp = s1;  //将指针tmp声明为指针s1,指向字符串第⼀个字符的指针,
while(n)
{
if(!(*s1++ = *s2++))  // 将str2的元素依次赋值给str1,当str2⼩于n时,⼀直赋值到最后的null字符终⽌,当str2⼤于n时,复制n个元素。
break;  // 当str2的长度⼩于n时,此循环判断条件起作⽤
n--;  // 当n⼩于字符串str2的长度时,此时循环判断条件起作⽤
}
while(n--)  // 当str2⼩于n时,递减后n扔为正数,将字符串数组s1后依次复制n-str2长度个'\0'。
*s1++ = '\0';
*s1 = '\0'; //可以实现仅保留复制的部分
return tmp;  // 函数返回指针,指向字符串str1第⼀个字符的指针。
}
int main(void)
{
char str1[128] = "abcdefg";
char str2[128] = "123456789";
size_t n;
printf("n = "); scanf("%u", &n);
printf("copy result: %s\n", strncpy(str1, str2, n));  // 函数实参为字符串数组的名称(相当于指向第⼀个元素的指针)和复制的字符个数n。
return0;
}
2、加载strncpy的头⽂件,可以直接调⽤strncpy函数
#include <stdio.h>
#include <string.h>  // strncpy的头⽂件
int main(void)
{
char str1[128] = "abcdefg";
char str2[128] = "123456789";
size_t n;
printf("n = "); scanf("%u", &n);
printf("copy result: %s\n", strncpy(str1, str2, n));  //函数实参为两个字符串数组(相当于指向数组第⼀个元素的指针,函数间数组的传递是以指向第⼀个元素的指针进⾏的)和    //复制的元素个数n。
return0;
}