编程实现strcpy函数
来源:互联网 发布:java游戏开发 编辑:程序博客网 时间:2024/05/12 12:02
http://hi.baidu.com/tangsu2009/item/14748bd3a49073362b35c7f4
已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);
(1)不调用库函数,实现strcpy函数。
(2)解释为什么要返回char *。
代码如下:
1 #include <stdio.h>
2
3 char * strcpy(char * strDest, const char * strSrc) // 实现strSrc到strDest的拷贝
4 {
5 if ((strDest == NULL) || (strSrc == NULL)) //判断参数strDest和strSrc的有效性
6 {
7 return NULL;
8 }
9 char *strDestCopy = strDest; //保存目标字符串的首地址
10 while ((*strDest++ = *strSrc++)!='\0'); //把strSrc字符串的内容拷贝到strDest下
11
12 return strDestCopy;
13 }
14
15 int getStrLen(const char *strSrc) //实现获取strSrc字符串的长度
16 {
17 int len = 0; //保存长度
18 while(*strSrc++ != '\0') //循环直到遇见结束符’\0’为止
19 {
20 len++;
21 }
22
23 return len;
24 };
25
26 int main()
27 {
28 char strSrc[] = "Hello World!"; //要被拷贝的源字符串
29 char strDest[20]; //要拷贝到的目的字符数组
30 int len = 0; //保存目的字符数组中字符串的长度
31
32 len = getStrLen(strcpy(strDest, strSrc)); //链式表达式,先拷贝后计算长度
33 printf("strDest: %s\n", strDest);
34 printf("Length of strDest: %d\n", len);
35
36 return 0;
37 }
(1)strcpy函数的实现说明:
代码5~7行判断传入的参数strDest和strSrc是否为NULL,如果是则返回NULL。
代码第9行把strDest的值保存到strDestCopy。
代码第10行对strSrc和strDest两个指针作循环移动,并不断把复制strSrc内存的值到strDest内存中。
由于第(2)步中保存了strDest的值,因此这里只需返回strDestCopy,那么函数调用完后返回的就是strDest的值。
(2)为什么strcpy函数要返回char *类型呢?这是为了能使用链式表达式。由于在strcpy中使用了char *返回类型,因此在代码32行中可以通过这种链式表达式来同时做两个操作。首先调用strcpy使得strDest复制了strSrc指向的内存数据,然后调用getStrLen函数获取strDest字符串的长度。这样不仅调用方便,而且程序结构简洁明了。程序的输出结果如下:
1 strDest: Hello World!
2 Length of strDest: 12
- 编程实现strcpy函数
- 编程实现strcpy函数
- 编程实现strcpy函数
- 编程实现strcpy函数
- 编程实现strcpy函数
- 编程实现strcpy和memcpy函数
- 不调用库函数,实现strcpy函数;编程实现memcpy函数
- 编程实现strcpy函数功能(非库函数)
- strcpy函数的实现
- strcpy函数实现
- 实现strcpy函数(转)
- strcpy函数的实现
- 实现strcpy()函数
- strcpy函数的实现
- strcpy函数实现
- strcpy函数的实现
- strcpy函数实现
- c实现strcpy函数
- 俄罗斯方块:Python实现
- 开机自动启动程序的几种方式
- 索骥馆-思维训练之最佳记忆方法-王洪礼的奇象记忆思维技术与方法 》扫描版[PDF]
- 一个老笑话的伟大境界
- OD查看程序函数列表(Ctrl+N)
- 编程实现strcpy函数
- 学习笔记:Silverlight 三种动画 图片截取 循环给二维数组赋值
- Zend framework重定向的方法
- MyEclipse全字符自动补全设置
- Sensor Framework原理
- quick sort in golang
- 两个与位运算有关的小问题【面试题】
- 直接拿来用!10段超有用的Git命令行代码
- android开发--翻转闹铃(从制作到打包)