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

news/2024/5/25 11:00:14/文章来源:https://blog.csdn.net/2301_81224771/article/details/136599957

目录

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.luyixian.cn/news_show_1005766.aspx

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

相关文章

qtablewidget 列宽自适应 而不是均分

102&#xff0c;103行就可以实现列宽自适应&#xff0c;但是需要注意&#xff0c;列宽必须先设置也就是99行必须在前。 有个简化写法 明天穿上来

.NET MAUI 社区工具包 2023 年亮点

作者&#xff1a;Kym Phillpotts 排版&#xff1a;Alan Wang 2023 年已经过去了&#xff0c;让我们花点时间回顾一下 .NET MAUI Community Toolkit 项目的历程以及展望接下来的发展。作为 .NET MAUI 的配套产品&#xff0c;该开源库为开发人员提供了一组丰富多样的控件、转换器…

用KNN算法进行鸢尾花分类

K-近邻算法&#xff08;K Nearest Neighbor) KNN算法的核心思想&#xff1a;你的“邻居”来推测你的类别 K的取值&#xff1a; K值取得过小&#xff0c;容易受到异常点的影响 K值取得过大&#xff0c;受样本不均衡的影响 KNN的API sklearn.neighbors.KNeighborsClassifier(n_…

vue 浏览器刷新报404,系统正常访问没问题

这个情况是因为vue的路由出问题了。 采用hash模式即可。 详细请了解&#xff1a; vue router 的两种路由模式hash与history的区别_vue hisotry-CSDN博客 vue默认是是hash

【WEEK2】 【DAY1】第一个MVC程序之使用注解【中文版】

2024.3.4 Monday 接上文 【WEEK1】 【DAY5】第一个MVC程序之配置文件【中文版】 目录 3.2.使用注解&#xff08;在实际使用中用不到3.1&#xff09;3.2.1.新建一个module&#xff0c;名为springmvc-03-hello-annotation&#xff0c;添加web支持3.2.2.由于Maven可能存在资源过…

最新APP开发趋势,探索2024年的创新与挑战

2024年&#xff0c;移动应用市场仍然是创新与变革的焦点。随着技术的不断发展和用户需求的不断变化&#xff0c;APP开发行业也在不断演进。本文将深入探讨2024年最新的APP开发趋势&#xff0c;以及所带来的创新与挑战&#xff0c;并介绍虎克技术公司提出的解决方案。 1. 强调用…

32单片机基础:输入捕获测频率

接线图如下图所示&#xff1a; 我们复制之前写过的代码6-3 PWM驱动LED呼吸灯 在PWM模块中&#xff0c;执行的逻辑是&#xff0c;初始化TIM2的通道1&#xff0c;产生一个PWM波形&#xff0c;输出引脚是PA0&#xff0c;通过SetCompare1的函数&#xff0c;可以调节CCR1寄存器的值…

spring中事务失效的场景有哪些?

异常捕获处理 在方法中已经将异常捕获处理掉并没有抛出。 事务只有捕捉到了抛出的异常才可以进行处理&#xff0c;如果有异常业务中直接捕获处理掉没有抛出&#xff0c;事务是无法感知到的。 解决&#xff1a;在catch块throw抛出异常。 抛出检查异常 spring默认只会回滚非检…

Ant Design Vue 表格单选选中改变当前行颜色

像这样鼠标移开后&#xff0c;背景色就不见了&#xff0c;但是确实是选中了这条数据 这种就是点击了选中的行后背景变色在点击别的别的变色 代码&#xff1a; <ele-pro-tableref"tableRef"row-key"userExtendId":columns"columns":rowClassN…

数据结构---二叉树

文章目录 一、二叉树的概念二、二叉树的形状三、二叉树的性质四、二叉树的存储。五、二叉树的遍历六、二叉树相关习题1.判断二叉树是否为完全二叉树2.寻找最近公共祖先3.从中序与后序遍历序列构造二叉树 一、二叉树的概念 二叉树是一个由结点构成的有限集合。 该集合可以为空&a…

【牛客】HJ62 查找输入整数二进制中1的个数

题目链接&#xff1a;查找输入整数二进制中1的个数_牛客题霸_牛客网 (nowcoder.com) 解题思路&#xff1a; 解法一: 可以举一个八位的二进制例子来进行分析&#xff0c;对于二进制操作&#xff0c;我们直到&#xff0c;除以一个2&#xff0c;原来的数字会减少一个0.如果除的过程…

企业微信高效沟通的秘诀

在数字化营销的浪潮中&#xff0c;企业微信已成为连接企业和客户的重要渠道。为了提升客户服务效率&#xff0c;许多企业通过设置快捷回复语来优化客户接待流程。然而&#xff0c;随着客户量的激增&#xff0c;传统的快捷回复已无法完全满足需求。今天&#xff0c;我要为大家介…

使用 Git 跟踪项目文件

本章内容为&#xff1a;用Django 写学习笔记程序第三章.2部署程序摘录&#xff0c;详情内容查看请跳转下方链接&#xff1a; 用Django 写学习笔记程序第三章.2部署程序 文章目录 使用 Git 跟踪项目文件虚拟环境中安装 gitgit 是什么git 安装完成后的简单配置创建项目忽略文件初…

[AutoSar]BSW_Com013 CAN TP 模块配置

目录 关键词平台说明一、缩写对照表二、Functional Description&#xff08;vector&#xff09;2.1 Asynchronous and Synchronous behavior of CanTp_Transmit2.1.1 asynchronous 2.1.2 synchronous2.2 Separation Time by Application 三、CanTpChannels3.1 接收端3.2 发送端…

element---tree树形结构(返回的数据与官方的不一样)

项目中要用到属性结构数据&#xff0c;后端返回的数据不是官方默认的数据结构&#xff1a; <el-tree:data"treeData":filter-node-method"filterNode":props"defaultProps"node-click"handleNodeClick"></el-tree>这是文档…

运行springboot项目提示:java: 错误: 不支持发行版本 18、java: 错误: 无效的源发行版:18

java: 错误: 不支持发行版本 18 解决方法&#xff1a;修改字节码版本&#xff0c;可以多试几次。 java: 错误: 无效的源发行版&#xff1a;18 解决方法&#xff1a; 出现这些错误原因&#xff1a; spring版本与jdk版本不对应 我的spring boot版本是3.2.2&#xff0c;对应的j…

5、设计模式之原型模式(Prototype)

一、什么是原型模式 原型模式属于创建型设计模式。通过复制现有的实例来创建新的实例&#xff0c;无需知道相应类的信息。 简单的讲就是当我需要创建一个指定的对象时&#xff0c;刚好现在就有这个对象&#xff0c;但又不能直接使用&#xff0c;所以简单的方式就是克隆一个一摸…

【阿里云系列】-基于云效构建部署Springboot项目到ACK

介绍 为了提高项目迭代的速度加速交付产品给客户&#xff0c;我们通常会选择CICD工具来减少人力投入产生的成本&#xff0c;开源的工具比如有成熟的Jenkins&#xff0c;但是本文讲的是阿里云提高的解决方案云效平台&#xff0c;通过配置流水线的形式实现项目的快速部署到服务器…

Golang入门简介与基本语法学习

简介 Golang的出现背景 Go语言&#xff0c;或我们通常称之为Golang&#xff0c;它的设计哲学深受其创造者的软件开发经验影响&#xff0c;它旨在实现快速编译、高性能、静态类型检查以及简洁明了的代码风格。 是由Google开发的一个开源编程语言&#xff0c;它首次公布于2009…

Qt(C++) | QPropertyAnimation动画(移动、缩放、透明)篇

动画类继承关系图 # QPropertyAnimation QPropertyAnimation是一个可以在Qt应用程序中使用的动画框架。它可以用于创建各种动画效果,包括但不限于以下几种: 1. 移动动画:可以将一个对象从一个位置平滑地移动到另一个位置。比如,你可以创建一个按钮,当用户点击它时,按钮…