您的位置:首页 > 编程语言 > C语言/C++

【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()宏功能原型、用法及实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  strcpy 模拟实现