当前位置: 首页 > 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节点宕机处理
  • 分享的文章《人生如棋》
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • canvas 五子棋游戏
  • Django 博客开发教程 16 - 统计文章阅读量
  • jdbc就是这么简单
  • MQ框架的比较
  • Python_OOP
  • Ruby 2.x 源代码分析:扩展 概述
  • Shadow DOM 内部构造及如何构建独立组件
  • SQLServer之索引简介
  • 翻译--Thinking in React
  • 分类模型——Logistics Regression
  • 两列自适应布局方案整理
  • 深入 Nginx 之配置篇
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 新版博客前端前瞻
  • 一、python与pycharm的安装
  • 一个完整Java Web项目背后的密码
  • 【干货分享】dos命令大全
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​比特币大跌的 2 个原因
  • ​人工智能书单(数学基础篇)
  • #includecmath
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (1) caustics\
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)u-boot-nand.bin的下载
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ******之网络***——物理***
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net Stream篇(六)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET企业级应用架构设计系列之技术选型
  • .net专家(张羿专栏)
  • @staticmethod和@classmethod的作用与区别
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [20160807][系统设计的三次迭代]
  • [ARC066F]Contest with Drinks Hard