当前位置: 首页 > news >正文

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>

(一)、命名介绍 🍭

strncpyC标准库中的一个字符串处理函数,其命名来源于 String Copy with Length Limit,即“带长度限制的字符串复制”。它的设计目的是为了安全地复制字符串,避免缓冲区溢出问题。

命名解析:📚
  • str:表示字符串(String),这是C标准库中字符串相关函数的通用前缀(如 strcpystrcatstrlen 等)。
  • 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
}

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 【每日学点HarmonyOS Next知识】Web上传文件、监听上下左右区域连续点击、折叠悬停、字符串相关、播放沙盒视频
  • 微服务架构下的 Node.js
  • [项目]基于FreeRTOS的STM32四轴飞行器: 四.LED控制
  • vue基本功
  • Devart dbForge Studio for MySQL Enterprise 9.0.338高效数据库管理工具
  • 在线SQL转ArkTs
  • PTA 7-6 列出连通集
  • Terraform 中安全地更改 EC2 实例 instance_type 的指南
  • idea 复制代码时不带富文本背景色
  • 记录一个Circle CI出现的错误
  • 全员DeepSeek时代,前端能做些什么?
  • 捣鼓180天,我写了一个相册小程序
  • 快速从C过度C++(二):引用,内联函数,nullptr
  • 通过u-boot启动Linux时的根文件系统挂载流程(init进程可能会进行二次挂载)
  • 前端实现版本更新自动检测✅
  • Redis渐进式遍历数据库
  • Mybatis中的分页操作,如何使用PageHelper进行分页,以及Spring Boot整合Mybatis Plus分页
  • Flink深入浅出之02:编程模型、数据源、算子、connector
  • 单片机中的基础外设GPIO的知识和应用—(6)
  • 门面设计模式和适配器模式有什么区别
  • 仿站小工具 wordpress/网站制作流程图
  • 武汉光谷做网站哪家好/沈阳网页建站模板
  • 常州网站建设企业网站制作/网站查询网
  • 网站建设方案确认表/软件开发培训机构
  • 网站开发 调试/线上营销推广公司
  • 制作网页和网站的区别/国产十大erp软件