面试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--)
面试15--strcmp,strcpy,memmove实现的更多相关文章
- 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)
面试 15:顺时针从外往里打印数字 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字.例如输入: {{1,2,3}, {4,5,6}, {7,8,9}} 则依次打印数字为 1.2.3. ...
- C 实现strcmp,strcpy,strcat函数
基于C语言的strcmp,strcpy,strcat函数的实现.C语言是一个程序猿的基础,一定要重视. char* strcat ( char * dst , const char * src ) { ...
- 剑指offer 面试15题
面试15题: 题目:二进制中1的个数 题:输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题思路一: 最佳方法:把一个整数减去1,再和原整数做“与运算”,会把该整数最右边的1变成0 ...
- memmove和memcpy 以及strcmp strcpy几个库函数的实现
memmove和memcpy 1.memmove 函数原型:void *memmove(void *dest, const void *source, size_t count) 返回值说明:返回指向 ...
- strcmp strcpy的使用 char类型
//判断从控制台输入的密码是否正确 BOOL varifyPassWord(char passWord[] , int index) { BOOL result = YES; int count = ...
- Java多线程面试15道
Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是 ...
- C语言实现strcat / strlen / strcmp / strcpy
主要考虑两点: 返回值对使用的便利性. 边界,null的判断. strcat char *m_strcat(char *des, const char *src) { assert((des != N ...
- Java面试15|网络
1.TCP(Transmission Control Protocol)三次握手与四次分手 TCP在不可靠的传输信道上提供了可靠传输的抽象,隐藏了我们的应用程序大部分的复杂性功能:丢包重传,按序传送, ...
- c++ strcmp strcpy sprintf
随机推荐
- Java 加载动态库 dll 文件
不知道具体原理,但是,加载 dll 文件时,带路径或者更改 dll 文件的名字,都会报错.虽然库记载成功了,但是处女座认为这不可接受.于是有了这个解决方案. 在根目录为库创建软连接,然后使用 syst ...
- Git新建分支,分支合并,版本回退详解
一.git基本命令 git拉取仓库代码 #拉取master代码 git clone git仓库地址 #拉取分支代码 git clone -b 分支名称 git仓库地址 2.git添加代码到本地仓库 g ...
- Java Base64Utils
Java Base64Utils /** * <html> * <body> * <P> Copyright 1994 JsonInternational</ ...
- lnmp1.4安装包
https://lnmp.org/install.html nginx中虚拟机中的配置 location ~ .*\.(php|php5)?$ { try_files $uri =404; fastc ...
- Vue传递方法给页面调用
很多人在使用vue的时候苦于在vue中写方法,但是在外部甚至在另一个js该如何调用呢? 这个方法就是显示了vue的可以传递方法到页面使得页面任何地方都可以调用 前提得引用文件 这个方法一般多用于加载周 ...
- mvc企业微信开发全局配置
protected void RegisterSenparcWork() { var isGLobalDebug = false;//设置全局 Debug 状态 ...
- C语言----选择结构(基础篇三)
大家好,忙里抽空更新一下自己的博客,算是自己的一个进步,C语言视频启蒙我早就看完啦,只是觉得这个视频真不错,所以给大家分享一下,同时自己还有很多没有理解透彻,写写博客算是一个笔记更是对自己所学的知识的 ...
- c++关于IOCP(完成端口)的服务器开发
本文转载,以便更好的学习C++的服务器开发 1.对IOCP的理解,转载地址 2.在C++中对IOCP的实现,转载地址 注:其实在.net中 ,Socket的服务器开发中,SocketAsyncEven ...
- Centos7安装Tomcat7,并上传JavaWeb项目
一.需要的工具(其他连接工具也行) 1.Xshell 2.XFTP 1.1首先将Tomcat7的压缩文件利用XFTP上传到Centos7系统上的 /etc/local/tomcat中 1.2 解压文件 ...
- npm换源成淘宝镜像
由于node下载第三方依赖包是从国外服务器下载,虽然没有被墙,但是下载的速度是非常的缓慢且有可能会出现异常. 所以为了提高效率,我们还是把npm的镜像源替换成淘宝的镜像源.有几种方式供我们选择 使用c ...