int memcmp(const void *string1, const void *string2, size_t n);
從兩個記憶體位址開始,比對n個bytes進行比較(維基百科的翻譯)操作過後,覺得那樣的講法有問題,應該要改成,從兩個記憶體開始的地方取n個依序進行比較,如果發現不同時,會進行該位址的數值大小比對,依據結果回傳0,-1,1
https://www.ibm.com/docs/en/zos/2.4.0?topic=programs-memcmp-compare-bytes
IBM的描述比較清楚,主要是從個別的起始位址開始依序比較n個數值大小,直到n結束時,若無發現不同時回傳0。發現第一個不同時,在比較該不同的位址的數值,哪個數值大。
0: 完全相同
1: string1> string2 (發現不同的地方數值是string1> string2)
-1: string1< string2 (發現不同的地方數值是string1< string2)
1. 以相同的字串進行比對
/*This file use to record string.h library use */ #include <string.h> #include <stdio.h> int main() { char str1[10]="Hello\n"; char str2[10]="Hello\n"; printf("%d\n",memcmp(str1,str2,3));//取三個比較,看判定結果 return 0; }
我們在字串1與字串2相同時,可以看到回傳結果為0。
2. 修改第三個字元比對
/*This file use to record string.h library use */ #include <string.h> #include <stdio.h> int main() { char str1[10]="Hello\n"; char str2[10]="HeAlo\n"; printf("%d\n",memcmp(str1,str2,3)); //修改Str2第三個字元,取各前三個比較,看判定結果 return 0; }
我們修改str2中第三個字元為A與Str1比較,可以看到回傳結果為1
3. 交換第三個字元比對
/*This file use to record string.h library use */ #include <string.h> #include <stdio.h> int main() { char str1[10]="HeAlo\n"; char str2[10]="Hello\n"; printf("%d\n",memcmp(str1,str2,3)); //交換第三個字元,取三個比較,看判定結果 return 0; }
沒有留言:
發佈留言