(C语言)strcpy与strcpy详解,与模拟实现

news/2024/4/21 0:15:14/

目录

1. strcpy

strcpy模拟实现:

实现方法1:

实现方法2:

2. strcat

strcat模拟实现:


1. strcpy

作用:完成字符串的复制。

头文件:<string.h>

destination是字符串要复制到的地点,source是字符串的来源,返回值是destination

演示:

strcpy模拟实现:

实现方法1:

#include <assert.h>char* my_strcpy(char* dest, const char* sour)
{assert(*dest != 'NULL');assert(*sour != 'NULL');char* p = dest;while (*sour != '\0'){*dest = *sour;dest++;sour++;}*dest = *sour;return p;
}int main()
{char arr1[] = "abedefg";char arr2[10] = { 0 };char* arr = my_strcpy(arr2, arr1);printf("%s\n", arr);printf("%s\n", arr2);return 0;
}

这种方式是比较麻烦低级的一种写法,下面我们看一个简单的写法。

实现方法2:

#include <assert.h>char* my_strcpy(char* dest, const char* sour)
{assert(dest != 'NULL');assert(sour != 'NULL');char* p = dest;while (*dest++ = *sour++){;}return p;
}

++会在完成解引用并赋值后对dest和sour再进行+1,使指针指向了下一个地址,当sour解引用后是\0时,不仅完成了赋值,并且等式返回的就是sour解引用后的值0,whlie循环结束。

2. strcat

作用:完成字符串的拼接。

头文件<string.h>

参数的内容和strcpy相似。

演示:

strcat模拟实现:

我们可以继续以实现strcpy方法思考,只需要将dest的向后加,使其指向他后面的'\0',让后在将模拟实现strcpy函数的代码拿过来就行了。

char* my_strcat(char* dest, const char* sour)
{assert(dest && sour != 'NULL');char* p = dest;while (*dest != '\0'){dest++;}while (*dest++ = *sour++){;}return p;
}

这样就完成了我们的模拟实现的功能。

感谢观看,欢迎在评论区讨论。


http://www.ppmy.cn/news/1377940.html

相关文章

华为OD机考-C卷

文章目录 攀登者问题停车场最短路径 攀登者问题 24/03/09 20:50~23:10 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。地图表示为一维数组&#xff0c;数组的索引代表水平位置&#xff0c;数组的元素代表相对海拔高度。其中数组元素0代表地面。一个山脉可能有多…

Flutter性能优化

性能分析工具 &#xff08;1&#xff09;performance overlay 开启performance overlay后&#xff0c;Flutter APP上将显示一个展示一个浮层&#xff0c;浮层中会实时展示当前的UI线程及Raster线程的运行情况。如果都是蓝色竖条&#xff0c;说明界面运行流畅&#xff0c;否则则…

机器人期刊:Science Robotics and IEEE Transactions

文章目录 1. Science Robotics (出版商 AAAS)2. IEEE Transactions on RoboticsReference1. Science Robotics (出版商 AAAS) https://www.science.org/journal/scirobotics 2. IEEE Transactions on Robotics

设计模式—桥接模式

定义: 桥接模式是将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。它是一种对象结构型模式&#xff0c;又称为柄体(Handle and Body)模式或接口(Interfce)模式。 本章代码:小麻雀icknn/设计模式练习 - Gitee.com 结构: 抽象化(Abstraction)角色&#xff1a…

k8s安全控制、授权管理介绍

目录 一.Kubernetes安全控制介绍 1.客户端认证操作 2.访问对象资源依次流程 二.授权管理介绍 1.AlwaysDeny 2.AlwaysAllow 3.ABAC 4.Webhook 5.Node 6.RBAC 三.Role解释 1.Role和ClusterRole 2.Rolebinding和ClusterBinding 3.Rolebinding和ClusterRole 四.准入…

239.滑动窗口最大值

一个和 滑动窗口有关的题目 官方给出了三种解法 很值得借鉴 方法一: priority_queue O(nlogn) 使用模板库的优先队列保存pair(i, nums[i]) 在取最大值 .top() 的时候 注意 看一看它的下标在不在范围内(<i-k), 不在的时候需要把它(队首元素)pop出去 每次push或者pop…

2008-2022年上市公司ESG基金持股数据

2008-2022年上市公司ESG基金持股数据 1、时间&#xff1a;2008-2022年 2、来源&#xff1a;Z国责任投资年度报告、上市公司年报 3、指标&#xff1a;年份、股票代码、”泛ESG“基金持股数量、”泛ESG“基金持股市值、是否”泛ESG“基金持股 4、范围&#xff1a;A股上市公司…

Java中常用的集合及方法(2)

在Java&#xff08;JDK8&#xff09;中&#xff0c;集合&#xff08;Collection&#xff09;是数据结构的实现&#xff0c;用于存储和操作对象集合。 集合&#xff08;Collection&#xff09;中包含的一般类或接口&#xff1a; 在这其中呢&#xff0c;我们经常使用的其实就是L…

C++_可变参数模板

目录 1、可变参数模板的用法 2、参数包展开 2.1 递归方式展开 2.2 逗号表达式形式展开 3、参数包的大小 结语 前言&#xff1a; C11引入了可变参数模板&#xff0c;他的作用是可以让创建的函数模板或者类模板的模板参数可以接收任意数量参数&#xff0c;在C11前&#x…

零知识玩转AVH(1)—— 初次接触

零、引言 近期&#xff0c;CSDN上的一位工作人员让我参加一个嵌入式的活动。她的原话是这样&#xff1a;“咱们这个主要是百度智能云虚拟硬件的活动&#xff0c;就是根据ARM的avh硬件&#xff08;虚拟硬件&#xff09;铲平&#xff0c;去开发一个demo&#xff0c;以及根据demo…

vue选项式API和组合式API区别-备忘

Vue.js 的选项式API和组合式API是两种不同的编写Vue组件的方式&#xff0c;它们各自有不同的特点和适用场景&#xff1a; 选项式API (Options API) 这是 Vue.js 最初的API设计方式&#xff0c;也是最为广泛使用的编程模型。在选项式API中&#xff0c;一个Vue组件由一系列可选…

Spring Cloud Gateway自定义过滤器

自定义全局过滤器 相关面试题&#xff1a;统计接口调用耗时&#xff0c;如何落地&#xff0c;谈谈设计思路&#xff1f; 自定义统计接口耗时的全局过滤器 https://docs.spring.io/spring-cloud-gateway/docs/4.0.9/reference/html/#gateway-combined-global-filter-and-gatewa…

Python调用edge-tts实现在线文字转语音

edge-tts是一个 Python 模块&#xff0c;允许通过Python代码或命令的方式使用 Microsoft Edge 的在线文本转语音服务。 项目源码 GitHub - rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an…

SSL:原理、应用、安全威胁与最佳实践

一、SSL的原理和应用 1.1 SSL的原理 SSL&#xff08;Secure Sockets Layer&#xff09;是一种安全协议&#xff0c;用于在互联网上建立加密的链接&#xff0c;保护在网络上传输的数据的安全。SSL协议主要用于Web浏览器和服务器之间的通信&#xff0c;但也可以用于邮件服务器、…

C#泛型:高级静态语言的效率利器

文章目录 引入类型约束子类泛型常用的泛型数据结构泛型委托 前文提要&#xff1a; &#x1f48e;超快速成&#xff0c;零基础掌握C#开发中最重要的概念&#x1f48e;抽丝剥茧&#xff0c;C#面向对象快速上手&#x1f48e;Winform&#xff0c;最友好的桌面GUI框架&#x1f48e;…

与00后的你,共享青春的色彩————“未来星辰交流会”qq 群成立了

点击此处加入群聊 你是否常常感到孤独&#xff0c;希望找到一个可以倾诉心声的地方&#xff1f;你是否对未知的世界充满好奇&#xff0c;期待与同龄的朋友分享生活的点滴&#xff1f;如果你是一个充满活力和梦想的00后&#xff0c;那么欢迎你来这里——“00后青春乐园”。 “…

Python虚拟环境搭建

一、下载安装Anaconda Anaconda官网&#xff0c;下载完成后一路next安装完成即可。 二、使用Anaconda &#xff08;Windows最好配合ConEmu,cmder等非原装cmd使用&#xff09; 查看版本&#xff1a;conda env list 查看已存在的镜像源&#xff1a;conda config --show chann…

图片在div完全显示

效果图&#xff1a; html代码&#xff1a; <div class"container" style" display: flex;width: 550px;height: 180px;"><div class"box" style" color: red; background-color:blue; width: 50%;"></div><div …

安装及管理docker

文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…

【前端】处理一次性十万条数据渲染方案(不考虑后端分页)

文章目录 一、定时渲染二、触底加载 一、定时渲染 思路&#xff1a;定时加载&#xff0c;分堆处理 1. 例如&#xff0c;前端请求到十五条数据以后&#xff0c;先不直接渲染&#xff0c;而是将这些数据分堆分批次渲染 2. 比如&#xff0c;一堆放10条数据&#xff0c;十万条数据…