一、基本概念
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/zh-hant/n/256930.html