/*
主题:实现strcpy函数
已知strcpy函数的原型是:
char *strcpy(char *srtDest, char *strSrc);
*/
#include <stdio.h>
char *strcpy(char *strDest, const char *strSrc);
int getStrLen (const char *strSrc);
int main(void)
{
char strSrc[] = "Hello World!";
char strDest[20];
int len = 0;
len = getStrLen(strcpy(strDest, strSrc));
printf("strDest: %s\n", strDest);
printf("Length of strDest: %d\n", len);
return 0;
}
char *strcpy(char *strDest, const char *strSrc)
{
/*
判断参数strDest和strSrc的有效性
*/
if ((strDest == NULL)|| (strSrc == NULL))
{
return NULL;
}
char *strDestCopy = strDest; //保存目标字符串的首地址
while((*strDest++ = *strSrc++) != '\0')
{
;
}
return strDestCopy;
}
int getStrLen (const char *strSrc)
{
int len = 0;
while(*strSrc++ != '\0')
{
len++;
}
return len;
}
(2)strcpy函数返回char *类型是原因是为了能够使用链式表达式. 关于链式表达式:
看到了这个词:链式表达式,之前没有听过,所以去百度了一下,发现有人解释的还算明白:
-------------------------------------------------------------------------------------------------------------------------------- http://topic.csdn.net/t/20061123/21/5180993.html 1,
就是方便一些,否则就要这样写:
char strDest[12];
strcpy( strDest, “hello world”);
int length = strlen(strDest);
什么链式就是一连串写下来的意思。。。
--------------------------------------------------------------------------------------------------------------------------------
其实,说白了,就是如果上面的字符串拷贝函数strcopy的返回值是void,那么,上面那句:
int length = strlen( strcpy( strDest, “hello world”) );
就要像上面那位的回答,写成好几句了:
char strDest[12];
strcpy( strDest, “hello world”);
int length = strlen(strDest);
而这种直接返回char *的手段,就是为了后来函数调用者方便而设计的.不用你这么麻烦用上述方法去使用了,而直接可以使用拷贝后的dest字符串了.这种方便的实现方法,看起来就是链子链在一起的,所以称为 链式表达式
如此而已.呵呵.