理解基础strcpy
来源:互联网 发布:小楼昨夜又东风 知乎 编辑:程序博客网 时间:2024/04/29 07:20
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset(p2, 0, 20);
while(*p2++ = *p1++);
printf(“%s\n”,p2);
}
运行结果你猜是什么。
结果是空,打印处就一换行。
其实这题很简单,p1和p2地址一直在增加,当遇到 \0时就复制结束,也就停在那里,即其指向了字符结尾处。虽然简单却容易犯错。
这一题明显有考strcpy的含义,于是就在网上搜strcpy源码是什么写的,显示如下:
1
2
3
4
5
6
char *strcpy(char *d,const char *s)
{
char *r = d;
while(*d++ = *s++);
return r;
}
看到源码于是又想问,这里不也是*d++吗,在外面打印是不是也会出现*d是不是也会出现空字符串呢,其实不是。
这里就用到作用域的概念,将strcpy写成一个单独的函数,其传递的参数是形参,即*r也是指向字符串的一个指针,不再是原来的指针,它只是改函数的局部变量而已,一旦strcpy函数执行完毕就消失了,所以大牛们没有写成这个样子,如下:
1
2
3
4
5
6
char *strcpy(char *d,const char *s)
{
char *r = d;
while(*r++ = *s++);
return d;
}
至此,写完了,总结一下,大牛们写的函数都是很经典的,膜拜啊.....
- 理解基础strcpy
- 深入理解strcpy,strncpy
- 深入理解strcpy,strncpy
- 深入理解strcpy,strncpy
- strcpy函数的理解
- strcpy()、memcpy()等的理解
- 【基础源码】strcpy函数实现
- 理解strcat、strncat、strcpy、strncy、strcmp、strncmp。
- C语言中strcpy函数的理解
- strcpy
- strcpy
- strcpy
- strcpy
- strcpy
- strcpy
- strcpy
- strcpy
- strcpy
- Linux下得知道的一些操作
- 10-接口和继承类的区别
- java内部类浅析1
- 你不是一个人在战斗——软件项目团队模型
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 理解基础strcpy
- 《Maven实战》阅读笔记整理(三)
- uploadify在struts2下的使用
- Java中List转换为数组,数组转List
- spring的事务管理有几种方式实现,如何实现
- HDU1215 七夕节 解题报告
- 嵌入式环境搭建之NFS
- 编码风格不是编码规范
- sql多条件查询语句