前言:对于库函数的使用,我们不仅要会使用方法,更要知晓使用原理,而知晓使用原理最好的方法就是模拟相应库函数的使用。 今天我们就来模拟 strcpy(复制字符串内容) 与 strlen(求字符串长度)这两个库函数的使用。

目录

  • 1.strlen的模拟:
  • 2.strcpy的模拟:

1.strlen的模拟:

首先我们要了解strlen这个库函数的使用方法,如图:

由图可知,strlen库函数的返回类型是无符号整型 (写成size_t 也等价于 unsigned int), 函数参数是
传进来的字符串数组地址 char* ,防止被更改,用const赋予常属性。

讲解:模拟函数 my_strlen返回类型也可以写成int ,因为长度非负数,这里我们就以int作为返回类型,注意增加断言,防止传入空指针而报错,具体实现参考如下代码。

#include <stdio.h>
#include <assert.h>
int my_strlen(const char* arr)
{assert(arr); // 断言 arr不是空指针NULL ,否则报错int count = 0;while (*arr != '\0'){count++;arr++;}return count;
}int main()
{char arr[] = "abcdef";int ret = my_strlen(arr);printf("%d\n", ret);return 0;
}

2.strcpy的模拟:

首先我们要了解strcpy这个库函数的使用方法,如图:

由图可知,这个库函数的返回类型是char*,前面参数是目的地地址char*,后面是源头地址char*,注意源头不能被读写,因此const赋予常属性。

讲解:这里我们要将数组arr1的内容复制到数组arr2中,arr2的大小要注意,要足够大,否则就会出现数组越界报错。用 char* 指针 ret接收目的地址(dest->arr2),
注意使用 assert 断言,防止传参进来的是空指针 NULL而报错,其他讲解的点在代码中以注释形式给出,请大家注意查看。

#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest,  const char* src)
{assert(src != NULL); //断言 增加代码健壮性和鲁棒性assert(dest!=NULL);char* ret = dest; // 复制前,记录目的地地址(接下来会被更改),用于打印while (*dest++ = *src++)//后置++,先使用(复制内容),再++{; //相关操作已在括号中给出,所以这里书写空语句}return ret;
}
int main()
{char arr1[] = "abcdef";char arr2[100] = "a";char* ret= my_strcpy(arr2,arr1); // arr1是源头,arr2是目的地,把arr1的内容放到arr2里面printf("%s\n", ret);return 0;
}

总结:我们可以以模拟各个库函数的使用来加深对库函数的理解与代码书写能力,这对学习各个库函数是十分重要的,大家可以参考上面模拟的两个库函数来对其他库函数进行模拟,熟练库函数的使用。

如果觉得文章对自己有所帮助,欢迎大家点赞收藏~ 谢谢大家的阅读,我们下期再见!

【C语言】模拟实现库函数 strcpy(复制字符串内容) 与 strlen(求字符串长度)相关推荐

  1. C语言--模拟实现库函数strcpy

    目录 前言 strcpy实现的基本原理 函数的模拟实现 代码优化 assert--断言 const关键字 strcpy的返回值 结语 前言 本章内容我们将通过相关函数来实现库函数中的strcpy. s ...

  2. strcpy实现 模拟实现库函数strcpy

    strcpy实现 模拟实现库函数strcpy #include<stdio.h> #include<assert.h>char* my_strcpy(char* dest, c ...

  3. C语言模拟实现库函数 atoi

    库函数atoi介绍 : 作用:将字符串中的数字转换成整形数字 参数:字符串指针 返回类型:int整形 模拟实现代码如下: #define _CRT_SECURE_NO_WARNINGS 1// 模拟实 ...

  4. php获取字符串商都_php strlen获取字符串字节长度和mb_strlen获取字符串个数长度的区别(strlen获取中文长度)...

    strlen获取字符串字节长度和mb_strlen获取字符串个数长度的区别,如果字符串是数字或者英文字母组成的话,它们2个的结果上体现不出区别,可是如果字符串是汉字组成的话它们2个的结果差异很大 重点 ...

  5. c语言模拟实现库函数strcat,【C语言】模拟实现库函数strcat函数

    CSS魔法堂:Reset CSS 下列样式规则可用于最小化各浏览器标签样式的不一致性.注意:实际使用时应该对其进行适当的调整,以适应项目要求. /* http://meyerweb.com/eric/ ...

  6. 编程小练习:最大公约数,字符串反序输出,全排列,不用加减法求和,字符串内容反序,字符串中最长数字串,数组是否递增,数组反转,链表反转,翻转单词顺序

    最大公约数 --- 递归.非递归 #include <stdio.h>int gcd(int a, int b); int gcd_recursive(int a, int b);int ...

  7. php 字符串内容过滤,php过滤字符串内容的

    下面举了二个实现来告诉你如何过滤重复的内容,有需要的朋友可以参考 foreach($arr as $value){ if(!empty($value)){ $strs=strstr($value,&q ...

  8. 用c语言模拟实现常用字符串函数

    目录 一.常用字符串函数介绍 1.strlen 2. strcpy 3.strcmp 4.strcat 5.strstr 二.模拟实现常用字符串函数 1.strlen 2.strcpy 3.strcm ...

  9. 《C语言杂记》理解字符串处理函数 strlen() strcpy() strcat() strcmp()

    在linux C 编程中,我们经常遇到字符串的处理,最多的就是字符串的长度.拷贝字符串.比较字符串等:当然现在的C库中为我们提供了很多字符串处理函数.熟练的运用这些函数,可以减少编程工作量,这里介绍几 ...

最新文章

  1. ext2_inode
  2. android镊 姩瀹夎 apk,用java写的jodconverter借用openoffice来转换office成pdf的示例代码...
  3. IOS修改设备用户代理UserAgent
  4. 基于HTML5 的人脸识别活体认证
  5. 微信小程序需要https后台的创业机会思考
  6. [html] DOM和BOM有什么区别?
  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级
  8. php7引用计数,PHP7 引用计数 读书笔记
  9. torch学习笔记--tensor介绍2,对tensor的结构
  10. Java实现图书管理系统
  11. 无法正常启动,错误0xc0150002
  12. python适合多大小孩学好拼音打字_都已经十七八岁的年龄了,突然发现自己居然不会拼音打字,现在想好好学,但是感觉无从下手。有什么方法么?...
  13. PaddleOCR整体了解
  14. shc在嵌入式Linux上的使用
  15. base64-图片传输
  16. [转] 怎样写好作文批语
  17. python抓取汇率_09 使用Python爬取中国银行网站选择汇率最坑的一天
  18. OAS的使用——概述
  19. 关于SPEEX和语音的研究(转载的基础上加原创)
  20. Docker 的数据持久化项目实战

热门文章

  1. redis源码分析(beta版本)-redis实现的概述逻辑
  2. Python源码学习:启动流程简析
  3. re.split()用法详解
  4. Linux之文件权限命令
  5. 1996 年 3 月. IEEE 成立了 802.3z 工作组开始制定 1000Mb/s 标准。下列千兆以太网中不属于该标准的是(19)【答案】C
  6. 实践|超简单实现OCR文字识别应用
  7. 实战:基于深度学习和几何的3D边界框估计
  8. 四张图彻底搞懂CNN反向传播算法(通俗易懂)
  9. 基于OpenCV的人员剔除
  10. 【从零学习OpenCV 4】了解OpenCV的模块架构