一、什么是strncpy
strncpy是一个C语言标准库函数,用于将一个字符串的一部分复制到另一个字符串中。它的声明通常是这样的:
char *strncpy(char *dest, const char *src, size_t n);
其中:
- dest为目标字符串;
- src为源字符串;
- n为需要拷贝的字符个数;
也就是说, 该函数能够将src指向的字符串的前n个字符复制到dest指向的字符串中。如果src字符串的长度小于n,则dest将被空字符填充以保证总共复制n个字符。如果src字符串大于或等于n,则dest不会被空字符结束。
二、strncpy的使用
2.1源字符串短于指定长度:
#include <stdio.h>
#include <string.h>int main()
{char src[] = "Hello, World!";char dest[20]; // 为目标字符串分配足够的空间// 将 src 的前 5 个字符复制到 dest 中strncpy(dest, src, 5);dest[5] = '\0'; // 手动添加字符串终止符,保证 dest 是以 null 结尾的 C 字符串printf("Copied string: %s\n", dest);return 0;
}
在上面这个例子中,我们需要注意的是:strncpy不会自动添加终止符,所以我们必须手动添加终止符到合适的位置,以确保它是以C字符串的形式结束的。
2.2源字符串等于指定长度:
#include <stdio.h>
#include <string.h>int main()
{char src[] = "Hello";char dest[6]; // 目标字符串长度为 6,刚好足够放下 src 字符串和终止符// 将 src 复制到 dest 中strncpy(dest, src, sizeof(dest));dest[sizeof(dest) - 1] = '\0'; // 手动添加字符串终止符printf("Copied string: %s\n", dest);return 0;
}
2.3源字符串长于指定长度:
#include <stdio.h>
#include <string.h>int main()
{char src[] = "Hello, World!";char dest[6]; // 目标字符串长度为 6// 将 src 复制到 dest 中,但是只复制 5 个字符,不包括终止符strncpy(dest, src, sizeof(dest));dest[sizeof(dest) - 1] = '\0'; // 手动添加字符串终止符printf("Copied string: %s\n", dest);return 0;
}
三、strncpy的模拟实现
#include<stdio.h>//模拟实现strncpy
//strncpy的原型char *strncpy(char *dest, const char *src, size_t n);char* my_strcpy(char* dest,const char* src,size_t n)
{char* start = dest;for (int i = 0; i < 5; i++){start[i] = src[i];}return dest;
}int main()
{char src[] = "Hello";char dest[20];my_strcpy(dest, src, 6);dest[5] = '\0';printf("%s\n", dest);return 0;
}
更多C语言相关练习请跳转test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)