strcmp: 用于比較兩個(gè)字符串,原型如下:
int strcmp ( char const *s1, char const *s2);
如果s1小于s2,strcmp函數(shù)返回一個(gè)小于零的值。如果s1大于s2,函數(shù)返回一個(gè)大于零的值。如果兩個(gè)字符串相等,函數(shù)就返回零。
警告:初學(xué)者常常會(huì)編寫下面這樣的表達(dá)式
if ( strcmp (a, b))
他以為如果兩個(gè)字符串相等,它的結(jié)果將是真。但是,這個(gè)結(jié)果將正好相反,因?yàn)樵趦蓚€(gè)字符串相等的情況下返回值是零(假)。 把這個(gè)返回值當(dāng)作布爾值進(jìn)行測(cè)試是一種壞風(fēng)格,因?yàn)樗哂腥齻€(gè)截然不同的結(jié)果:小于、等于和大于。 所以更好的方法是把這個(gè)返回值與零進(jìn)行比較。
當(dāng)然我們?cè)趯?shí)際工作中也經(jīng)常會(huì)碰到將其返回值與布爾值進(jìn)行判斷,我們來看下面這個(gè)例子:
char a[];
……
if ( !strcmp( a, "5"))
{ printf(“equally!”);
}else{
printf("unequal!");
}
在這個(gè)例子中我們分析下:
如果a的值為5,則返回值為0,那么判斷也就成為 if(!(0)) ,(0)取反后為1 ,1位TRUE則判斷為 if( TRUE )
如果a的值小于5,則返回一個(gè)負(fù)數(shù),而負(fù)數(shù)的取反是FALSE; 大于5,則返回一個(gè)正數(shù),正數(shù)的取反也是FALSE;
因此上例中a 的值為5 則輸出 equally ; 不等于5都輸出 unequal
我們可以做一個(gè)小測(cè)試 -1 、 0 、 1三數(shù)分別取反,會(huì)得到 0、1、0 。
標(biāo)準(zhǔn)并沒有規(guī)定用于提示不相等的具體值。它只是說如果第一個(gè)字符串大于第二個(gè)字符串就返回一個(gè)大于零的值,如果第一個(gè)字符串小于第二個(gè)字符串就返回一個(gè)小于零的值。一個(gè)常見的錯(cuò)誤是一位返回值就是1和-1,分別代表大于和小于。這個(gè)假設(shè)并不總是成立。 (跟具體的編譯器有關(guān))
轉(zhuǎn)自:
http://piao8163.blog.163.com/blog/static/96972478200981343957704/