strncpy函数是 C 语言标准库中的字符串处理函数,用于将一个字符串的指定长度部分复制到另一个字符串中。

strncpy函数头文件

strncpy函数的头文件是<string.h>。在使用strncpy函数之前,确保在你的 C 代码中包含这个头文件:

#include <string.h>

strncpy函数原型

char *strncpy(char * restrict s1,
    const char * restrict s2,
    size_t n);

strncpy函数将不超过n个字符(不复制空字符'\0'后面的字符)从s2指向的数组复制到s1指向的数组。如果在重叠的对象之间进行复制,则行为未定义。

如果s2指向的数组长度是一个短于n个字符的字符串,strncpy会用'\0'填充s1指向的数组,直到总共写入n个字符;

如果s2指向的数组长度是一个大于或等于n个字符的字符串,strncpy不会自动添加'\0'

参数说明

  • s1:目标字符串的指针,表示复制后的字符串存储的位置。
  • s2:源字符串的指针,表示要复制的字符串。
  • n:要复制的最大字符数(不一定是实际复制的字符数)。

返回值

strncpy函数返回目标字符串的指针,也就是s1的值;

strncpy示例代码

示例 1:复制字符串,自动填充终止符

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, world!";
    char dest[20];

    // 目标空间足够大
    // 会使用'\0'填充剩余部分
    strncpy(dest, src, sizeof(dest));

    printf("%s\n", dest);

    return 0;
}

示例 2:手动添加终止符

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[10]; 

    strncpy(dest, src, 5);
    // 仅复制前5个字符
    // 源字符串长度大于或等于n时
    // strncpy不会自动添加'\0'

    dest[5] = '\0'; // 需手动添加终止符
    
    printf("%s\n", dest);

    return 0;
}