| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 通过模拟strcpy函数学习编程思想 -> 正文阅读 |
|
[C++知识库]通过模拟strcpy函数学习编程思想 |
目录 ??????? strcpy函数简介strcpy是c语言库中的一个函数,需要包含<string.h>头文件。它可以实现数组的拷贝。将src数组中的所有元素(包括末尾的\0)拷贝在另一个dst数组中。 以下是cplusplus网站中对strcpy函数的介绍 ?我们通过介绍,可以先尝试自己模拟strcpy的实现 最初版代码我们需要传进两个常量字符串在这个函数中,然后对每个字符进行操作
复制出来后的dst数组就应该为以下的输出结果 ?但这个函数,虽说确实可以完成复制的功能,但是仍然存在大量的问题,也不够简洁。 以下几步会对代码进行逐步优化。 第一次优化:简化代码我们可以直接将代码这样放置
代码中的++运算符是后置的,可以做到先使用此次的变量,也就是先替换增加之前的字符,再进行++操作,找到下一个字符。 也可以进一步简化
这样的优化,不仅继承了前一段代码的优点,也少了替换'\0'的一步 在while循环中,先把src替换到dst变量中,再判断dst是不是为0。 如果src已经遍历到'\0'了,替换到dst中,而因为'\0'的ASCii值为0,判断为假,这个while将会终止,也将会停止复制。 经过这一次优化后,代码会变的更加简洁。 第二次优化:代码有效性经过了第一次优化,基本实现了将代码简化的功能,但是如果在传参过程中传入了空指针,可能会导致程序出现问题 这样程序如果在后期使用中如果意外传入了空指针,将会导致程序崩溃。? 为了解决这一问题,我们可以使用断言来帮我们判断是否为空指针 断言(assert)的介绍断言是c语言提供的一种函数,需要包含<assert.h>头文件,如果在assert里面的表达式为false,程序将会直接报错,随后退出程序 以下是使用示例
当判断到assert为假时,程序直接报错 并且会给我们提示在哪一行触发的断言?,在断言后的语句将停止执行。 这个函数可以给我们代码的优化提供以下的提示: 我们可以使用assert断言检查传进的字符串是否是空字符串,如果是直接终止程序的运行。 这样我们就可以写出下面的代码。 代码实现
?这样我们就程序有效性的优化就完成了。 第三次优化:字符串的安全性我们在编写程序的时候,可能会出现在上面的代码中将dst和src写反位置的情况 这样将会造成src被意外修改,程序的安全性较低 也可能会有其他外界因素,造成src被意外修改 于是,我们考虑可以使用const来修饰src,防止src被意外修改 关于const修饰符const是c语言的一种修饰符,它限定了一个变量不能被随意改变
?但虽然使用const修饰了,但是num的本质却仍然是变量。 那么num能不能被修改呢 你别说还真有 我们可以使用指针间接修改num
程序不会报错,但是这种写法其实并不支持,它违背了const的初衷。 我们可以使用const的特性,修饰我们的src字符串,使其无法被修改 代码实现
这样保证了程序的健壮性。 第四次优化:靠近标准库函数将返回值设为char*
至此,代码全部优化完毕 总结与提示
本期内容到此结束啦!由于作者水平有限,文章中如有不足与疏漏之处在所难免,希望各位大佬提出你们宝贵的意见!笔芯~ |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/19 1:14:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |