memcmp与strcmp区别
2019独角兽企业重金招聘Python工程师标准>>>
一、memcmp含义
Compare characters in two buffers.
int memcmp( const void* buf1, const void* buf2, size_t count );inline int wmemcmp ( const wchar_t* buf1, const wchar_t* buf2, size_t count);
Parameters
buf1 : First buffer.
buf2 : Second buffer.
count : Number of characters.
Return Values : The return value indicates the relationship between the buffers.
Return Value Relationship of First count Bytes of buf1 and buf2
< 0 buf1 less than buf2
0 buf1 identical to buf2
> 0
buf1 greater than buf2
二、memcmp与strcmp的区别
int memcmp(const void * cs,const void * ct,size_t count)
{
const unsigned char *su1, *su2;
int res = 0;
for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
if ((res = *su1 - *su2) != 0)
break;
return res;
}
int strncmp(const char * cs,const char * ct,size_t count)
{
register signed char __res = 0;
while (count) {
if ((__res = *cs - *ct++) != 0 || !*cs++)
break;
count--;
}
return __res;
}
1、这两个函数的差别其实还是挺大的,差别在这里:
对于memcmp(),如果两个字符串相同而且count大于字符串长度的话,memcmp不会在\0处停下来,会继续比较\0后面的内存单元,直到_res不为零或者达到count次数。
对于strncmp(),由于((__res = *cs - *ct++) != 0 || !*cs++)的存在,比较必定会在最短的字符串的末尾停下来,即使count还未为零。具体的例子:
char a1[]="ABCD";
char a2[]="ABCD";
对于memcmp(a1,a2,10),memcmp在两个字符串的\0之后继续比较
对于strncmp(a1,a2,10),strncmp在两个字符串的末尾停下,不再继续比较。
所以,如果想使用memcmp比较字符串,要保证count不能超过最短字符串的长度,否则结果有可能是错误的。
2、strncmp("abcd", "abcdef", 6) = 0。比较次数是一样的:
memcmp:在比较到第5个字符也就是'\0',*su1 - *su2的结果显然不等于0,所以满足条件跳出循环,不会再进行后面的比较。我想在其他情况下也一样。
strncmp:同样的道理再比较到第5个字符时结束循环,其实strncmp中“!*cs++”完全等同于“!*ct++”,其作用仅在于当两个字符串相同的情形下,防止多余的比较次数。
转载于:https://my.oschina.net/ifraincoat/blog/476445
memcmp与strcmp区别相关推荐
- 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
模拟实现内存比较函数memcmp: 该函数与strcmp有相似之处,都可用于字符串比较是否相同,若相同,则返回0值.若前者大于后者,则返回大于0的整型值,否则返回小于0的整型值. 区别在于: str ...
- memcpy和strcpy的区别及memcmp和strcmp的区别
strcpy与memcpy的区别: strcpy的原型:char *strcpy(char *dest, const char *src) strcpy是拷贝字符串.①不指定长度②以\0为标志结束(即 ...
- memcmp和strcmp的返回值
注意,无论是内存比较还是字符串比较,这两个函数的返回值的意义是一样的. 如果相同,返回0 如果前面大于后面,返回大于0 如果前面小于后面,返回小于0 一定要注意,相同的时候是0,不是true. 转载于 ...
- C/C++中的字符串比较函数strcmp/memcmp/CString.Compare/CString:CompareNoCase
memcmp和strncmp的区别 一.memcmp含义 Compare characters in two buffers. int memcmp( const void* buf1, const ...
- c语言中 compare函数,C/C++中的字符串比较函数strcmp/memcmp/CString.Compare/CStrin
memcmp和strncmp的区别 一.memcmp含义 Compare characters in two buffers. int memcmp( const void* buf1, ...
- 【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
https://blog.csdn.net/hanjing_1995/article/details/51539583 strcpy 拷贝源字符串到子字符串,包括'\0'. 代码实现: [cpp] v ...
- linux常用c函数(中文版)
都是linux的c函数东西略多,用页面搜索来查找吧. << Back to man.ChinaUnix.net isalnum(测试字符是否为英文或数字) 相关函数 isalpha,isd ...
- strncasecmp与strcasecmp用法
strcasecmp strcasecmp(忽略大小写比较字符串) 相关函数 bcmp,memcmp,strcmp,strcoll,strncmp 表头文件 #include<string.h& ...
- C++语言篇 第六章 字符数组及函数(不能用在string字符串中)
字符数组 数组中的每个元素都是一个字符的数组称为"字符数组".有时,把一维字符数组又称为"字符串".定义字符数组的方法与定义其他类型数组的方法类似. 对于字符数 ...
最新文章
- [精]Odoo 8.0深入浅出开发教程-模块开发基础
- 资源 | 这是你要的Keras官方中文版(附文档链接)
- Pytorch张量tensor的使用
- qpython3安装lxml_centos python安装lxml报错
- 下面使用计算机动画制作的,2020年最新电大《计算机二维动画制作》形考作业任务01-03网考试题及答案(10页)-原创力文档...
- ubuntu百度网盘下载大文件
- 我阅读的第一个程序GridView遇到的问题
- 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案
- 【数据挖掘】挖掘建模-回归分析(1)
- S1304第一本书内测测试分析
- 计算机的发展导致了计算思维的诞生,尔雅电子计算机的诞生(上)
- 常用的RS485芯片简介
- azure微软文字转语音工具​AzureTools​使用
- 如何在Word中插入大小合适的高清图片
- Html5 打砖块游戏,加入道具和速通模式(含源码)
- 用户发送的eth值msg.value,在合约中以wei为单位。
- Python编程-pypyodbc无驱动和无法打开注册表等错误的解决办法
- android 2.1你好八月,八月你好优美句子
- android网络音乐播放器
- 从零搭建游戏服务器,拢共分几步?
热门文章
- java 2017腾讯面试题_腾讯2017刁难面试题,是不是大神就看你会做几题
- oracle log.xml分析,Oracle 11g Alert Log日志位置及参数
- python里安装mysql有错_尝试在Python3.4上安装MySQL时出错
- 客户端分析php代码,分享:一个简单的全网解析客户端代码。
- 20210101:力扣第42周双周赛(上)
- AWS服务器可以设置虚拟ip吗,《AWS云计算实战》3.使用虚拟服务器:EC2
- 缓存能提高多少 php,提高PHP编程效率 引入缓存机制提升性能
- wpf window 不执行show 就不能load执行_关于机器学习中的Scikit-Learn,你不知道的10个实用功能...
- greys的简单使用
- 你真的了解特洛伊木马吗!