一、基本概念
memcmp和strcmp都是C语言标准库中的字符串比较函数。
strcmp()主要功能是比较两个字符串的大小,也就是按字节比较两个字符串中相应字符的ASCII码值的大小。
memcmp()主要功能是比较两段内存区域的大小,也就是按字节比较两个内存区域中相应字节的值的大小。
二、参数列表
strcmp()有两个参数,都是指向字符串的指针。假设这两个指针分别为str1和str2,那么strcmp(str1, str2)的返回值可能是下列三种中的一种:
- str1==str2,返回值为0
- str1<str2,返回值小于0
- str1>str2,返回值大于0
memcmp()也有两个参数,分别是指向两段内存的指针和比较的字节数。假设这两个指针分别为ptr1和ptr2,比较的字节数为size,那么memcmp(ptr1, ptr2, size)的返回值可能是下列三种中的一种:
- ptr1==ptr2,返回值为0
- ptr1<ptr2,返回值小于0
- ptr1>ptr2,返回值大于0
三、比较方式
strcmp()是在两个字符串中逐个字符比较,直到出现字符不相同为止。如果全部字符相同,那么两个字符串就是相等的,函数返回值为0。如果出现字符不相等,那么两个字符串的比较结果就是出现不相等的字符的ASCII码值的差,函数返回值为这个差值。
如果字符串中存在空字符\0,那么strcmp函数在遇到空字符时就认为这个字符表示字符串的结束,因此就不会比较空字符后面的字符了。这也意味着在遇到空字符前,如果两个字符串都相等,那么这两个字符串就是相等的。
memcmp()是逐个比较内存块中的字节值。如果遇到不同的字节,那么比较就立即结束,函数返回值就是不同字节的值的差。如果两个内存块完全相同,那么memcmp的返回值就是0。
四、适用场景
strcmp()比较适合用于比较字符串,特别是C-style的字符串。对于C++的string类型,除非两个string长度相同,否则strcmp()并不总是能正确比较它们。实际上,它们并不是一定被存储在连续的内存区域里的。
memcmp()则更加通用,适用于任何类型的数据的比较。如果需要比较二进制数据,那么memcmp()比strcmp()更能胜任。此外,如果需要比较的数据并非字符串,或者需要比较的字符串当中包含了空字符\0,那么memcmp()才能够有效地进行比较。
五、示例代码
#include <stdio.h> #include <string.h> int main() { char str1[20] = "abcdef"; char str2[20] = "abcdeR"; int cmp = strcmp(str1, str2); int mem = memcmp(str1, str2, strlen(str1)); int mem_s = memcmp(str1, str2, strlen(str2)); printf("strcmp: %d\n", cmp); printf("memcmp (strlen(str1)): %d\n", mem); printf("memcmp (strlen(str2)): %d\n", mem_s); return 0; }
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/256930.html