面试15--strcmp,strcpy,memmove实现
int strcmp( const char *string1, const char *string2 )
就像上面两个字符串,strcmp是从第一个字符开始比较,若是相同,就往后走一个字符,直到找到两个不同的字符或者有一个字符串已经结束,遇到了 '\0' ,若是碰到了两个不同的元素,就比较这两个字符的大小,若是str1>str2,就返回正数,要是str1
int my_strcmp(const char *dst,const char *src)
while(*s != '\0' && *d != '\0')
strcpy是用来复制字符串的,将源字符串(包括 '\0' )复制到目标字符串中,前提是得保证目标字符串有足够的空间去接收源字符串。
char *strcpy( char *strDestination, const char *strSource )
char *my_strcpy(char *dst,const char *src)
if(dst == NULL || src == NULL)
char *strstr( const char *string, const char *strCharSet );
strstr是用于查找字符串当中的字串的,在string中查找是否存在strCharSet字串。若存在则返回在string中出现strCharSet的第一个字符的地址,若在string中不存在strCharSet字串,则返回NULL。
const char *my_strstr(const char *dst, const char *src)
char *strchr( const char *string, int c )
strchr是用来查找字符的,在目标字符串中是否有字符ch出现,若找到则返回第一次出现的地址,若没有找到,则返回NULL。
const char *my_strchr(const char *dst, int c)
下面两个就有一点复杂,与string有些不同。他们是对内存进行操作的,以字节为单位进行复制。他们两个在某些情况下是有相同的功能的,但是还是有不一样的地方。memcpy不考虑内存重叠的问题。就像下图②所示,这两个字符串有内存重叠的地方,若是不考虑的话,直接从前往后复制的时候,会将后面还没有复制的地方改变,从而改变了还未进行复制的src串。就会导致拷贝的结果出错,最后得到的不是预期要的。图①的情况就适用于从后向前拷贝,所以在复制拷贝时需要判断是否出现了内存重叠的问题。
void *memcpy( void *dest, const void *src, size_t count );
memcpy没有考虑内存重叠的问题,它就是单纯的从前向后拷贝。
void *my_memcpy(void *dst, const void *src,size_t size)
if(dst == NULL || src == NULL)
void *memmove( void *dest, const void *src, size_t count )
memmove考虑了内存重叠的问题,进行了判断,若是src大于dst,就从后向前拷贝,若是src小于dst,就从前向后拷贝。
void *my_memmove(void *dst,const void *src,size_t size)
if(NULL == dst || NULL == src)
for(i = (int)size - 1; i >= 0; i--)
最新文章
- <;%#Eval if判断用法
- [MongoDB]MongoDB与JAVA结合使用CRUD
- centos minimal 开启无线网卡 &; 查看IP
- hiho #1288 微软2016.4校招笔试题 Font Size
- python threading基础学习
- 用RequireJS优化Wijmo Web页面
- iOS7之后经过滑动返回导航栏隐藏和显示带来的坑(转载)
- SQL Server Profiler的使用
- [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?
- linux 条件
- nginx http2 push 试用
- 批量 ping 测试脚本(IP 扫描)
- Tensorflow游乐场
- CFLAGS CPPFLAGS CPPFLAGS 区别
- Dubbo、Zookeeper集群搭建及Rose使用心得(二)
- [转]在ubuntu下安装sublime text
- ES6系列_10之Symbol在对象中的作用
- IIS6.0+PHP5.3+mssql 配置及远程连接数据库
- sublime格式化css代码插件:css format
- 495. Teemo Attacking
热门文章
- comment on exported function Perimeter should be of the form ";Perimeter ...";go-lint
- react 中 Modal 多次使用且带参数不同实现
- 【题解】Luogu P4284 [SHOI2014]概率充电器
- 配置 Nginx 反向代理 WebSocket
- U9-ERP BuildupDesigner 操作
- kubernetes(k8s) Prometheus+grafana监控告警安装部署
- Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif
- 把微信小程序异步API转为Promise,简化异步编程
- android studio学习----打包
- android.view.ViewRoot$CalledFromWrongThreadException 异常的解决方案