在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中則可以不加 ...