重写strcpy

来源:互联网 发布:linux 定时器状态 编辑:程序博客网 时间:2024/05/01 21:36

参考自:一道面试题(strcpy函数写法)


1、原strcpy的使用方法


void main(void){char strA[20], strB[]= { "Knowledge is power!" };strcpy(strA, strB);cout << strA << endl;}
实现了将strB的内容复制到了strA中,这样,strA输出的也是strB了。


2、重写strcpy


上代码

#include<iostream>#include<string>using namespace std;char* mStrcpy(char* dest, const char *sour){if ((dest == NULL) || (sour == NULL)){return NULL;//error}char* temp=dest;while ((*dest++ = *sour++) != '\0');return temp;}void main(void){char strA[20], strB[]= { "Knowledge is power!" };mStrcpy(strA, strB);cout << strA << endl;}


1)为什么const char *sour


因为src在函数里是不允许改动的,所以为了保证其不被改动,所以设成的const.

PS:const char *p

       char const *p//上面两个是一样的,因为const都在*前,所以指向的内容不能改

       char *const p//这个是指向的指针不能改,因为const在*之后。


2)解释“while ((*dest++ = *sour++) != '\0');”


其实写明显点就是

while ((*dest = *sour) != '\0'){dest++;sour++;}

为什么要(*dest = *sour) != '\0'而不是(*sour) != '\0'呢?因为若只判断*sour是否等于零,则当*sour等于'\0'时循环就结束了,那么最后dest所指向的字符串尾部没有'\0'结尾了。



1 0
原创粉丝点击