C语言strncpy函数

strncpy是C标准库(<string.h>)中用于字符串操作的函数,其核心功能是将源字符串的前n个字符复制到目标字符串中。与strcpy不同,strncpy通过限制复制长度来避免缓冲区溢出,但也需注意其特性。

函数定义

char *strncpy(char *dest, const char *src, size_t n);

参数说明

  • dest:目标字符串的指针,需预先分配内存
  • src:被复制的源字符串
  • n:最多复制的字符数(包含结尾的'\0'

返回值

返回目标字符串的指针(即dest),通常可直接忽略返回值。

示例代码

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

int main() {
    char src[] = "Hello, World!";
    char dest[20];
    
    strncpy(dest, src, 5);
    dest[5] = '\0'; // 必须手动添加终止符
    
    printf("目标字符串: %s\n", dest); // 输出 "Hello"
    return 0;
}

注意事项

  1. 不自动添加终止符:若复制的字符数等于n,函数不会自动添加'\0'
  2. 缓冲区大小:确保dest的容量至少为n+1(含终止符)
  3. 性能问题:当n远大于src长度时,会填充大量'\0'
  4. 安全替代方案:可考虑snprintf(dest, n, "%s", src)实现类似功能
  5. 应用场景:适合处理固定长度字段(如文件名、协议字段等)

常见错误

// 错误示例:未处理终止符
char dest[5];
strncpy(dest, "Hello", 5);
printf("%s", dest); // 可能输出乱码