【C/C++】模拟实现strcpy的N种境界
2016-07-19 09:37
423 查看
一、什么是strcpy?
所谓的strcpy,是C语言中用来进行字符串拷贝的函数函数原型:
char* strcpy(char* strDestination,const char* strSource);
头文件:string.h
简单用法:
#include<stdio.h>#include<string.h>int main() { char str[35] = {0}; char* p = "welcome to 皓皓松's blog"; strcpy(str,p); printf("%s\n",str); return 0; }
运行结果:
二、模拟实现strcpy的N种境界
(1)基础版
void my_strcpy(char* dest,char* src) { while(*src!='\0') { *dest = *src; dest++; src++; } *dest = '\0'; }
分析:
无非就是利用指针偏移来已经逐个拷贝
最后加上‘\0’
(2)初级简化版
void my_strcpy(char* dest,const char* src) { while(*src) { *dest++ = *src++; } *dest = '\0'; }
分析:
利用后置法,简化了代码量!
有一定的提升
(3)注意返回类型
char* my_strcpy(char* dest,const char* src) { char* p = dest; while(*src) { *dest++ = *src++; } *dest = '\0'; return p; }
分析:
将函数类型名该为 char*
通过查CSDN我们可以知道
strcpy是有一个字符类型的指针
返回的是目的字符数组的首地址
(4)简化‘\0’的拷贝
char* my_strcpy(char* dest,const char* src) { char* p = dest; while(*dest++ = *src++) { ; } return p; }
分析:
减少了最后需要加入的'\0'
简化了代码,直接在while循环的判断语句进行赋值
(5)加入assert(断言)提高安全性
char* my_strcpy(char* dest,const char* src) { assert(dest != NULL); assert(src != NULL); char* p = dest; while(*dest++ = *src++) { ; } return p; }
分析:
加入断言,用于判断传进来的字符指针是否指向空
增加了代码的安全性
main函数测试代码块:
int main() { char str[35] = {0}; char* p = "welcome to 皓皓松's blog"; my_strcpy(str,p); printf("%s\n",my_strcpy(str,p));//用于测试带有返回值的 my_strcpy() printf("%s\n",str); return 0; }
精品推荐:
assert()宏功能原型、用法及实例
相关文章推荐
- 深入分析C中不安全的sprintf与strcpy
- C语言中的strdup()函数和其与strcpy()函数的区别
- 详解C语言中strcpy()函数与strncpy()函数的使用
- 惊讶,微软的所谓“安全的”文字列拷贝函数strcpy_s 居然非常粗暴(只在Debug版发生)
- C/C++中野指针的问题
- strcpy函数实现
- strcpy函数实现-续
- VS2010编译警告:warning C4996:‘strcpy’:This function
- 学习笔记---str族函数
- strcpy函数实现
- strcpy memcpy等相关函数实现
- strncpy()函数
- strcpy和memcpy的区别与实现
- 用起泡法对输入的十个字符由小到大顺序排列
- strcpy系列字符串处理函数的常见误用及正确使用方法
- strcpy_s不接受两个参数 String的实现
- 编写一个标准strcpy函数 等C++问题
- 动态内存传递
- strcpy函数的用法,strlen,sizeof区别
- 实现strcpy函数功能