字符串拼接之char实现

目录

一、前言

二、memcpy函数用法

三、代码实现


一、前言

        c++中想到字符串拼接,我们都知道可以用c++库中std::string的字符串中的简单加法进行拼接。示例:

int main()
{std::string str1 = "hello";std::string str2 = "World";std::string str = str1 + str2;std::cout << "str = " << str;
}

        但如果用字符char声明的原生字符串,应该很少人能够想到实现这一功能,其实很简单只需要掌握c语言中的memcpy函数就能实现这一功能。

二、memcpy函数用法

        在C语言中,memcpy是一个库函数,用于从源内存块复制指定数量的字节到目标内存块

memcpy函数的原型如下:

void *memcpy(void *dest, const void *src, size_t n);

参数说明:

  • dest:指向目标内存块的指针,即要复制到的位置。
  • src:指向源内存块的指针,即要从中复制数据的位置。
  • n:要复制的字节数。

三、代码实现

int main()
{char str1[0x10]{ "123"};  // 初始化字符串大小为16字节,值为:“123”char str2[0x10]{ "456" }; char str3[0x20];         // 将str1复制给str3memcpy(str3, str1, strlen(str1)); // 将str2复制给str3,注意复制的起点指针地址为str的指针加上str1的字节大小memcpy(str3 + strlen(str1), str2, strlen(str2) + 1);std::cout << str3 << std::endl;
}

注意点:

memcpy(str3 + strlen(str1), str2, strlen(str2) + 1);

1.注意复制的起始位置,在将str2复制给str3时,注意复制的起点指针地址为str的指针加上str1的字节大小。

2.memcpy的第三个参数为str2的字节长度再+1,这里很重要,必须要加1

        这里的1指的是一个空字符为: \0,参考字符串在内存中的存储。字符串在这些语言中是以字符数组的形式存在的,并且它们以空字符(null character)\0(其ASCII值为0)作为结记。        

         作用:这个空字符用于标识字符串的结束,因为C和C++中的字符串没有内置的长度信息,它们只是简单的字符数组。

 如果不+1,最后打印结果为乱码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

差动放大器

差动器的出现是为了解决直接耦合电路存在的零点漂移问题&#xff0c;另外&#xff0c;差动放大器还有灵活的输入&#xff0c;输出方式。 一&#xff0c;基本差动放大器 差动放大器在电路结构上具有对称性&#xff0c;三极管VT1&#xff0c;VT2同型号&#xff0c;R1R2,R3R4,R5…

每天写java到期末考试(6.10)--java小项目01

实现项目任务 java类 package java1;import java.util.ArrayList; import java.util.Scanner;public class Test {public static void main(String[] args) {//8.创建一个集合&#xff0c;用于存放相同个体&#xff0c;一个个添加&#xff0c;注意作用范围&#xff0c;将数组放…

词频统计(Word Frequency Analysis)详解

词频统计&#xff08;Word Frequency Analysis&#xff09;是语言学和文本分析中的一个重要工具&#xff0c;用于统计文本中各个词汇的出现频率。以下是关于词频统计&#xff08;PTA&#xff09;的详细解释&#xff0c;结合参考文章中的相关信息进行归纳和总结&#xff1a; 一…

cell的复用机制和自定义cell

cell的复用机制和自定义cell UITableView 在学习cell之前&#xff0c;我们需要先了解UITableView。UITableView继承于UIScrollView&#xff0c;拥有两个两个相关协议 UITableViewDelegate和UITableViewDataSource&#xff0c;前者用于显示单元格&#xff0c;设置行高以及对单…

Java从入门到放弃

线程池的主要作用 线程池的设计主要是为了管理线程&#xff0c;为了让用户不需要再关系线程的创建和销毁&#xff0c;只需要使用线程池中的线程即可。 同时线程池的出现也为性能的提升做出了很多贡献&#xff1a; 降低了资源的消耗&#xff1a;不会频繁的创建、销毁线程&…

LeetCode 算法:缺失的第一个正数c++

原题链接&#x1f517;&#xff1a;缺失的第一个正数 难度&#xff1a;困难⭐️⭐️⭐️ 题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输…

(第31天)【leetcode题解】404、左叶子之和

目录 404、左叶子之和题目描述思路代码 404、左叶子之和 题目描述 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 思路 题目分析&#xff1a; 判断左叶子节点&#xff1a;A节点的左孩子不为空&#xff0c;且左孩子的左右孩子都为空&#xff0c;那么这个左孩子…

Java手写HashMap

之前面试拼多多的时候问到了&#xff0c;但是没练习过。 直接上代码 import java.util.Objects;/*** ClassName: MyHashMap* PackageName: com.joshua* author: Joshua Lee* create: 2024/6/10 - 20:21* description: 自己实现HashMap*/ public class MyHashMap<K, V> {…

ASP.NET的WebService跨域CORS问题解决方案

ASP.NET WebService 跨域(CORS, Cross-Origin Resource Sharing)问题通常发生在当您尝试从不同的源(域名、协议或端口)调用 WebService 时。浏览器由于安全原因,默认会阻止此类跨域请求。为了解决这个问题,您需要在 WebService 服务器端配置 CORS。 以下是在 ASP.NET We…

域内攻击 ----> DCSync

其实严格意义上来说DCSync这个技术&#xff0c;并不是一种横向得技术&#xff0c;而是更偏向于权限维持吧&#xff01; 但是其实也是可以用来横向&#xff08;配合NTLM Realy&#xff09;&#xff0c;如果不牵强说得话&#xff01; 那么下面&#xff0c;我们就来看看这个DCSyn…

[Vue3:axios]:实现登录跳转页面展示列表(查看教师所承担课程的学生选课情况)

文章目录 一&#xff1a;前置操作项目结构&#xff1a; 二&#xff1a;登录页面主要流程说明运行截图前端代码Login.vue 三&#xff1a;列表页面交互逻辑&#xff1a;涉及页面Page02.vue &#xff08;登录成功跳转学生选课页面&#xff09;运行截图 一&#xff1a;前置操作 ht…

数据结构:插入排序和希尔排序

插入排序 逆序的情况下&#xff1a; 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(1) 顺序的情况下&#xff1a; 时间复杂度&#xff1a;O(N) 空间复杂度…

将字符串str1复制为字符串str2

定义两个字符数组str1和str2&#xff0c;再设两个指针变量p1和p2&#xff0c;分别指向两个字符数组中的有关字符&#xff0c;通过改变指针变量的值使它们指向字符串中的不同的字符&#xff0c;以实现字符的复制。编写程序&#xff1a; 运行程序&#xff1a; 程序分析&#xff1…

【T3】畅捷通T3软件查询明细账等账簿,出现某些列串位置。

【问题描述】 查询畅捷通T3软件科目明细账的时候&#xff0c; 出现某些行的数据串位置&#xff0c; 摘要、金额、方向都没有在对应的列。 【解决方案】 根据跟踪发现&#xff0c;最终在客户档案上发现问题。 数据串位中对应的客户名称、简称中的对后面多了一个【tab】键的空格…

从数组和指针笔试题深度理解 sizeof 和 strlen

一、sizeof 和 strlen 的区别 a.sizeof sizeof 计算变量所占内存内存空间大小的&#xff0c;单位是字节&#xff0c;如果操作数是类型的话&#xff0c;计算的是使用类型创建的变量所占内存空间的大小。sizeof 只关注占用内存空间的大小&#xff0c;不在乎内存中存放什么数据。…

Mysql学习(八)——多表查询

文章目录 五、多表查询5.1 多表关系5.2 多表查询概述5.3 内连接5.4 外连接5.5 自连接5.6 联合查询5.7子查询5.8 总结 五、多表查询 5.1 多表关系 概述&#xff1a;项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;…

Deepin安装PostGresql

最近要把开发环境完全从Windows移到Deepin上&#xff0c;本次介绍在Deepin借助apt-get安装和配置数据库。同时可以用Dbever提供图形化管理工具。 安装PostGreSQL数据库和创建数据库 #安装postgresql zhanglianzhuzhanglianzhu-PC:/$ sudo apt-get install postgresql-16 正在…

STM32CubeIDE使用过程记录

最近在做一款机器人的开发&#xff0c;使用到了STM32CubeIDE&#xff0c;这里记录一些使用技巧方便后续查阅。 STM32CubeIDE使用过程记录 快捷键开启代码自动补全功能看门狗设置CRC设置IO口取反定时器设置 及 定时器中断外部中断GPIO配置STC15单片机GPIO模式配置片内闪存&#…

完美落地的自动化测试框架(pytest):智能生成?业务依赖?动态替换?报告构建?你来,这儿有!

前言 随着软件测试行业的快速发展&#xff0c;去测试化、全员测开化的趋势&#xff0c;技术测试已成为确保软件质量不可或缺的一环。 但对于许多没有代码基础或缺乏系统性自动化知识的测试人员来说&#xff0c;如何入手并实现高质量的自动化测试成为了一个挑战。 为此&#xff…

【Java01】Java 17中的switch

Java 17中的switch 1. 新式switch语句的格式 switch (expression) {case value1 -> 表达式、代码块;case value2, value3 -> 表达式、代码块;// ...default -> 表达式、代码块; }case后允许同时放置多个valuecase value后的冒号变箭头case后的代码块不需要breakcase…