C中資料的比較簡介(strcmp memcmp)

2021-08-04 21:57:23 字數 968 閱讀 4984

在c中,資料的對比函式一般使用strcmp和memcmp這兩種,現在對這兩種進行簡介:

1、 memcmp

標頭檔案:string.h

函式名: intmemcmp (const void *buf1, const void *buf2, unsigned int count)

功能:比較記憶體區域buf1和buf2的前count個位元組,其結果為按位元組進行對比

結果為:當buf1當buf1=buf2時,返回=0

當buf1>buf2時,返回大於0

2、 strcmp

標頭檔案:string.h

函式名:intstrcmp(const char *s1,const char *s2)

功能:比較字串s1和s2,s1小於s2則返回負數,s1等於s2則返回零,s1大於s2則返回正數。其對比是以字元為單位的。

附上glibc裡的strcmp:

int strcmp (const char *p1, const char *p2)

const unsigned char *s1 = (const unsigned char *) p1;

const unsigned char *s2 = (const unsigned char *) p2;

unsigned char c1, c2;

doc1 = (unsigned char) *s1++;

c2 = (unsigned char) *s2++;

if (c1 == '\0')

returnc1 - c2;

while (c1 == c2);

return c1 - c2;

可以發現strcmp對比的是字串。

結論:對比如果是字串,可以使用strcmp,比較好記憶,

但一般推薦使用memcmp,這個以位元組為單位進行比較,可對整型等資料進行比較,具有較好的通用性,跟主要的是strcmp無法對包含『\0』的陣列進行比較。

關於strcmp比較的問題

前幾天查了乙個問題,查了很長時間才查出來,發現是strcmp在和比較的時候出錯了,程式直接掛掉了,也沒見有什麼提示,最後發現是因為傳入的乙個值是個null指標。而且並不是每次比較都掛掉,而是和空值比較了幾次之後才掛掉,比較奇怪。深層次的原因還未查到,這裡先記錄下 聽說在aix下strcmp傳入nul...

c 中的strcmp的坑

參考 參考 題目 include using namespace std int n,i,r,ans,h char a 1010 b 1010 intmain cout cout return0 注意題目中的strcmp判別條件,0表示前面的大於後面的,0表示前面的小於後面的,0表示兩者相同。絕對不...

字串的比較 strcmp

函式原型 extern int strcmp const char s1,const char s2 所在標頭檔案 在.c檔案需加入string.h標頭檔案 在vc6或vs2012中,沒有加入該標頭檔案,仍能正常執行,但會出現warning strcmp undefined 在.cpp中則可以不加 ...