2025-03-06 学习记录--C/C++-C 库函数 - strcat()、strncpy()
一、C
库函数 - strcat()
⭐️
C
标准库 -<string.h>
(一)、命名介绍 🍭
strcat()
是C
标准库中的一个函数,用于将两个字符串拼接(连接)在一起。它的名字来源于string concatenation(字符串拼接)
。
(二)、函数声明 🍭
char *strcat(char *dest, const char *src)
把
src
所指向的字符串追加到dest
所指向的字符串的结尾。
参数:🎀
dest
– 指向目标数组,该数组包含了一个C
字符串,且足够容纳追加后的字符串。src
– 指向要追加的字符串,该字符串不会覆盖目标字符串。
返回值:🎀
- 该函数返回一个指向最终的目标字符串
dest
的指针。
举例: 🎀
#include <stdio.h>
#include <string.h>
int main ()
{
char src[50], dest[50];
strcpy(src, "This is source");
strcpy(dest, "This is destination");
strcat(dest, src);
printf("最终的目标字符串: |%s|", dest);
return(0);
}
二、C
库函数 - strncpy()
⭐️
C
标准库 -<string.h>
(一)、命名介绍 🍭
strncpy
是C
标准库中的一个字符串处理函数,其命名来源于String
Copy
with
Length
Limit
,即“带长度限制的字符串复制”。它的设计目的是为了安全地复制字符串,避免缓冲区溢出问题。
命名解析:📚
str
:表示字符串(String
),这是C
标准库中字符串相关函数的通用前缀(如strcpy
、strcat
、strlen
等)。n
:表示长度限制(Length
Limit
),即函数会限制复制的字符数量,防止超出目标缓冲区的容量。cpy
:表示复制(Copy
),即函数的主要功能是复制字符串。
因此,strncpy
可以理解为“带长度限制的字符串复制函数”。
(二)、函数声明 🍭
char *strncpy(char *dest, const char *src, size_t n)
把
src
所指向的字符串复制到dest
,最多复制n
个字符。当src
的长度小于n
时,dest
的剩余部分将用空字节填充。
参数:🎀
dest
– 指向用于存储复制内容的目标数组。src
– 要复制的字符串。n
– 要从源中复制的字符数。
返回值:🎀
- 该函数返回最终复制的字符串。
举例: 🎀
下面的实例演示了
strncpy()
函数的用法。在这里,我们使用函数memset()
【请查看我的另一篇文章】来清除内存位置。
#include <stdio.h> // 引入标准输入输出库,用于使用 printf 等函数
#include <string.h> // 引入字符串处理库,用于使用 memset、strcpy、strncpy 等函数
int main()
{
char src[40]; // 定义一个长度为40的字符数组 src,用于存储源字符串
char dest[12]; // 定义一个长度为12的字符数组 dest,用于存储目标字符串
memset(dest, '\0', sizeof(dest)); // 使用 memset 将 dest 数组的所有元素初始化为 '\0'(即空字符)
// 作用:确保 dest 数组在使用前是干净的,避免潜在的垃圾值
strcpy(src, "This is test"); // 使用 strcpy 将字符串 "This is test" 复制到 src 数组中
// 注意:src 数组的长度足够大,可以容纳该字符串及其结束符 '\0'
strncpy(dest, src, 10); // 使用 strncpy 从 src 数组中复制前10个字符到 dest 数组中
// 注意:strncpy 不会自动在目标字符串末尾添加 '\0',除非复制的字符数小于目标数组的长度
printf("最终的目标字符串: %s\n", dest); // 打印 dest 数组中的内容
// 由于 strncpy 复制了10个字符,且 dest 数组长度为12,dest 的内容为 "This is te",末尾没有 '\0'
// 但由于之前使用 memset 初始化了 dest,dest 的第11个字符是 '\0',因此可以正确打印
return 0; // 程序正常结束,返回0
}