赞
踩
提示:仅供参考,如有错误,还望指出。
前言
以下是对字符串复制的一些优化
这是自己能想到的方法
主要思想:通过两个指针,对二者进行遍历,若该被复制的字符不为‘\0’来进行一一复制。
可是这样‘\0’字符就无法复制,而此时被复制字符的地址刚好又是‘\0’,再进行一次复制就好。
- //我的字符串复制
- void my_strcpy(char* dest,char* rsc)
- {
- while (*rsc != '\0')
- {
- *dest = *rsc;
- dest++;
- rsc++;
- }
- *dest = *rsc;
- }
注:这些优化都是基于前一次的优化,也体现出一个循序渐进的过程
这里实现了一小点的优化,也就是将三句语句合成一句
- void my_strcpy(char* dest, char* rsc)
- {
- while (*rsc != '\0')
- {
- *dest++ = *rsc++;
- }
- *dest = *rsc;
- }
2.二次优化
这里实现了我们既可以赋值字符也能够复制'\0'
由于当被复制的字符为‘\0’时,也得到了复制,同时还跳出了循环
- void my_strcpy(char* dest, char* rsc)
- {
- while (*dest++ = *rsc++)
- {
- ;
- }
- }
这里优化了健壮性,可这里没有体现出问题在哪。
在二次优化中,添加了一个判断语句,只有二者同时不为空指针时,才会进入遍历复制的过程。
- void my_strcpy(char* dest, char* rsc)
- {
- if (dest != NULL && rsc != NULL)
- {
- while (*dest++ = *rsc++)
- {
- ;
- }
- }
- }
这里用到了断言函数assert();同时需要添加<assert.h>该头文件
使用assert()函数,若不满足函数体中条件,就会报错,并且具体体现在哪一行,更有利于找错。
- #include<assert.h>
- my_strcpy(char* dest, char* rsc)
- {
- assert(dest != NULL);
- assert(rsc != NULL);
- while (*dest++ = *rsc++)
- {
- ;
- }
- }
这个就比较细节,也是为了防止一些错误而形成的优化。
在被复制字符中加上一个const,为了防止while循环中的条件,若不注意将二者位置调换,就会出现报错的情况。
这里也给大家推荐一个网站cplusplus.com - The C++ Resources Network
若有不懂的函数或者函数需要的头文件都可以在这里查。 这里也到了strcpy函数中参数的类型,若以后要写类似于库函数的函数也可以考虑这里面的参数类型。
- #include<assert.h>
- void my_strcpy(char* dest, const char* rsc)
- {
- assert(dest != NULL);
- assert(rsc != NULL);
- while (*dest++ = *rsc++)
- {
- ;
- }
- }
在我看来,编程很像数学,每当你了解到一个题目的多种解法后,有些解法会给人一种十分奇妙的感觉,也有一种勾起好奇心的感觉,就是由于这种好奇心,促使这我们成长。不过有时候的编程也很乏味,但是我们一定要坚持。
学习不易,如果这篇对你有帮助,足矣。
最后附上学习的链接(同样要是有一起学习的伙伴就更好了)
25.VS环境-C语言实用调试技巧(2)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程_哔哩哔哩_bilibili
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。