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