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

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

目录

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;
}

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

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

相关文章:

  • 天啊,腾讯云服务器“地域”选择看这里,选错不能改!
  • k8s中storageClass存储介绍
  • 浅谈 前端的动态绑定属性
  • DAY by DAY 史上最全的Linux常用命令汇总----history游览历史
  • springboot的maven多模块如何混淆jar包
  • 热销商品-爬虫销量信息
  • 蓝桥杯练习题-特殊日期
  • 【C++】二叉树进阶之二叉搜索树
  • 【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)
  • JUC之JMM
  • android metaRTC编译
  • 记录一次大厂面试题
  • Linux:导出环境变量命令export
  • Android7.1 ANR error 弹窗处理
  • 全局Ceph节点宕机处理
  • Brief introduction of how to 'Call, Apply and Bind'
  • co模块的前端实现
  • CSS 三角实现
  • ECMAScript6(0):ES6简明参考手册
  • extract-text-webpack-plugin用法
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • JS专题之继承
  • k8s 面向应用开发者的基础命令
  • underscore源码剖析之整体架构
  • 力扣(LeetCode)22
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 试着探索高并发下的系统架构面貌
  • 一个项目push到多个远程Git仓库
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​ubuntu下安装kvm虚拟机
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (07)Hive——窗口函数详解
  • (12)Linux 常见的三种进程状态
  • (16)Reactor的测试——响应式Spring的道法术器
  • (31)对象的克隆
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (ZT)薛涌:谈贫说富
  • (笔试题)分解质因式
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET : 在VS2008中计算代码度量值
  • .NET 5种线程安全集合
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET MVC之AOP
  • .net 后台导出excel ,word
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NetCore项目nginx发布
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net专家(高海东的专栏)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @synthesize和@dynamic分别有什么作用?