字符串拼接之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,最后打印结果为乱码:

相关文章:
字符串拼接之char实现
目录 一、前言 二、memcpy函数用法 三、代码实现 一、前言 c中想到字符串拼接,我们都知道可以用c库中std::string的字符串中的简单加法进行拼接。示例: int main() {std::string str1 "hello";std::string str2 "World";std::…...
教育的数字化转型——Kompas.ai如何变革学习体验
引言 在现代教育中,数字化转型逐渐成为提升学习效果的重要手段。随着科技的进步,人工智能(AI)在教育领域的应用越来越广泛。本文将探讨教育数字化转型的发展趋势,并介绍Kompas.ai如何通过AI技术变革学习体验。 教育数…...
域内攻击 ----> DCSync
其实严格意义上来说DCSync这个技术,并不是一种横向得技术,而是更偏向于权限维持吧! 但是其实也是可以用来横向(配合NTLM Realy),如果不牵强说得话! 那么下面,我们就来看看这个DCSyn…...
前端 JS 经典:动态执行 JS
前言:怎么将字符串当代码执行。有 4 中方式实现 eval、setTimeout、创建 script 标签、new Function 1. eval 特点:同步执行,当前作用域 var name "yq"; function exec(string) {var name "yqcoder";eval(string); …...
Laravel学习-模型注入
一. 在定义路由的时候,可以在闭包函数里引入模型, Route.get(/api/user/{user:id}, function(\App\Model\UserModel $user) {return value; }) 其中:id可以省略不写,这个意思是,请求该接口时,会UserMode…...
Django模板的使用(详细版)
1、配置 在工程中创建模板目录templates(这个名字可以变!!) 在settings.py配置文件中修改TEMPLATES配置项的DIRS值 2、定义模板 在templates目录中新建一个模板文件,如index.html 3、模板渲染 Django提供了一个函数…...
正则表达式基础
正则表达式基础 一、初识正则表达式 思考–问题答案在文末 问题1:text1 ‘height:178,weight:168,sid:123456,passwd:9527’,如何快速找出密码?问题2:text2 ‘他的电话…...
【Linux】进程间通信之命名管道
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…...
【内存管理】页表映射
页表的一些术语 现在Linux内核中支持四级页表的映射,我们先看下内核中关于页表的一些术语: 全局目录项,PGD(Page Global Directory) 上级目录项,PUD(Page Upper Directory) 中间目…...
Cloudpods 强大的多云管理平台部署
简介 Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源,提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源,极大简化多云架构复杂度和难度,帮助企业…...
深度学习的可微渲染
深度学习的可微渲染 可微渲染(Differentiable Rendering)是深度学习领域的一个重要概念,它将传统的计算机图形学与深度学习结合起来,通过使渲染过程可微分(differentiable),以便于在深度学习模…...
CAS Server Restful接口实现后台认证
背景 对于一些比较复杂定制化登录页的情况下,之前提到过可以自定义修改使用CAS Server提供的登录页这种操作已经明显跟不上复杂定制场景了,所以CAS Server也提供了支持Restful接口,支持服务端后台登陆,对于复杂登陆场景时&#x…...
Linux shell编程学习笔记58:cat /proc/mem 获取系统内存信息
0 前言 在开展系统安全检查的过程中,除了收集cpu信息,我们还需要收集内存信息。在Linux中,获取内存信息的命令很多,这里我们着重研究 cat /proc/mem命令。 1 cat /proc/mem命令 /proc/meminfo 文件提供了有关系统内存的使用情况…...
【InternLM实战营第二期笔记】07:OpenCompass :是骡子是马,拉出来溜溜
文章目录 课程实操 课程 评测的意义是什么呢?我最近也在想。看到这节开头的内容后忽然有个顿悟:如果大模型最终也会变成一种基础工具(类比软件),稳定或可预期的效果需要先于用户感知构建出来,评测 case 就…...
matlab演示银河系转动动画
代码 function GalaxyRotationSimulation()% 参数设置num_stars 1000; % 恒星数量galaxy_radius 1; % 银河系半径rotation_speed 0.05; % 旋转速度% 生成银河系中的恒星分布theta 2 * pi * rand(num_stars, 1); % 角度r galaxy_radius * sqrt(rand(num_stars, 1)); % 半径…...
备战 清华大学 上机编程考试-冲刺前50%,倒数第5天
T1:多项式求和 小K最近刚刚习得了一种非常酷炫的多项式求和技巧,可以对某几类特殊的多项式进行运算。非常不幸的是,小K发现老师在布置作业时抄错了数据,导致一道题并不能用刚学的方法来解,于是希望你能帮忙写一个程序…...
leetCode127. 单词接龙
leetCode127. 单词接龙 // bfs 剪枝 class Solution { public:int ladderLength(string beginWord, string endWord, vector<string>& wordList) {// 1.将所有的单词放在set字段中unordered_set<string> s;for (auto & ele : wordList) s.insert(ele);//…...
进程概念(二)
目录 进程优先级基本概念查看系统进程PRI and NIPRI vs NI修改进程优先级的命令renice修改优先级进程其他概念 环境变量基本概念查看环境变量方法常见环境变量PATHHOMESHELL 查看环境变量环境变量相关的命令 环境变量特征命令行参数main函数中的俩个参数 argc argvmain函数的第…...
java程序100道01—20
1.用循环的嵌套,输出输出如下图形 * * * * * * * * * * * * * * * * * * * * * * * * * package Exercises.One_Hundred; public class Demo01 {public static void main(String[] args) {for(int i1;i<5;i){for(int j1;j<2*i-1;j){Sys…...
让GNSSRTK不再难【第二天-第7部分2】
状态更新计算过程: 计算卡尔曼增益: 根据预测的误差协方差矩阵 P k − P_k^- Pk− 和观测噪声协方差矩阵 R R R 计算卡尔曼增益 K k K_k Kk: K k P k − H T ( H P k − H T R ) − 1 K_k P_k^- H^T (H P_k^- H^T R)^{-1} KkPk…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
