C语言之memcmp函数

2024-02-22 04:32
文章标签 语言 函数 memcmp

本文主要是介绍C语言之memcmp函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【FROM MSDN && 百科】

原型:  int memcmp(const void *buf1, const void *buf2, unsigned int count);

#include<string.h>

比较内存区域buf1和buf2的前count个字节。此函数是按字节比较。

Compares the first num bytes of the block of memory pointed by ptr1 to the first num bytes pointed by ptr2, returning zero if they all match or a value different from zero representing which is greater if they do not。

Notice that, unlike strcmp, the function does not stop comparing after finding a null character.


对于memcmp(),如果两个字符串相同而且count大于字符串长度的话,memcmp不会在\0处停下来,会继续比较\0后面的内存单元,如果想使用memcmp比较字符串,要保证count不能超过最短字符串的长度,否则结果有可能是错误的。


DEMO:

[cpp]  view plain copy
  1. //#define FIRST_DEMO  
  2. #define MYMEMCMP  
  3. #ifdef FIRST_DEMO  
  4. #include <stdio.h>  
  5. #include <conio.h>  
  6. #include <string.h>  
  7. int main(void)  
  8. {  
  9.     char *s1="Hello, Programmers!";  
  10.     char *s2="Hello, Programmers!";  
  11.     int r;  
  12.     r=memcmp(s1,s2,50/*strlen(s1)*/);  
  13.     if (!r)  
  14.     {  
  15.         printf("s1 and s2 are identical!\n");  
  16.     }  
  17.     else if (r<0)  
  18.     {  
  19.         printf("s1 less than s2\n");  
  20.     }  
  21.     else  
  22.     {  
  23.         printf("s1 greater than s2\n");  
  24.     }  
  25.     getch();  
  26.     return 0;  
  27. }  
  28. #elif defined MYMEMCMP  
  29. #include <stdio.h>  
  30. #include <conio.h>  
  31. #include <string.h>  
  32. int mymemcmp(const void *buffer1,const void *buffer2,int ccount);  
  33. void Print(char *str1,char *str2,int t);  
  34. int main(void)  
  35. {  
  36.     char *str1="hel";  
  37.     char *str2="hello";  
  38.     Print(str1,str2,mymemcmp(str1,str2,3));  
  39.     Print(str2,str1,mymemcmp(str2,str1,3));  
  40.     Print(str2,str2,mymemcmp(str2,str2,3));  
  41.     getch();  
  42.     return 0;  
  43. }  
  44. /*FROM:http://blog.chinaunix.net/uid-20480343-id-1941630.html */  
  45. int mymemcmp(const void *buffer1,const void *buffer2,int count)  
  46. {  
  47.     if (!count)  
  48.     {  
  49.         return 0;  
  50.     }  
  51.     while(count && *(char *)buffer1==*(char *)buffer2)  
  52.     {  
  53.         count--;  
  54.         buffer1=(char *)buffer1-1;  
  55.         buffer2=(char *)buffer2-1;  
  56.     }  
  57.     return (*((unsigned char *)buffer1)- *((unsigned char *)buffer2));  
  58.   
  59. }  
  60.   
  61. void Print(char *str1,char *str2,int t)  
  62. {  
  63.     if (t>0)  
  64.     {  
  65.         printf("\n%s Upper than %s \n",str1,str2);  
  66.     }  
  67.     else if(t<0)  
  68.     {  
  69.         printf("\n%s Lower than %s \n",str1,str2);  
  70.     }  
  71.     else  
  72.     {  
  73.         printf("\n%s equal %s \n",str1,str2);  
  74.     }  
  75. }  
  76. #endif  
memcmp按字节比较,可以设置比较的位数
strcmp按字符比较,只能比较整个字符串
都是用ASCII码进行比较,效率在数量级上不会相差太大的

这篇关于C语言之memcmp函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734137

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注