C語言中strcmp函數(shù)是string庫的常用函數(shù)。其原型代碼和介紹如下:
創(chuàng)新互聯(lián)是一家專業(yè)提供新源企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站制作、H5網(wǎng)站設(shè)計、小程序制作等業(yè)務(wù)。10年已為新源眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。
1.先說一下這個函數(shù)的實現(xiàn)原理,向strcmp()函數(shù)中傳入兩個字符串(記為str1,str2).傳入之后,通過把str1的各字母的ASCII碼值和str2的各字母的ASCII碼值進行比較。若str1str2則返回正數(shù),若str1=str2則返回0,否則,則返回負數(shù)。
2.下面實現(xiàn)代碼:
3.整個函數(shù)的原型中得益于“(*str1!='\0')(*str1==*str2)”這一句的代碼,因為這樣當(dāng)字符指針指向空,意味著字符串已經(jīng)移動到最后了,比較結(jié)束,此時可以退出循環(huán)。而如果兩個字符串不相等時,則此時函數(shù)也可以退出了。
擴展資料:
這個函數(shù)要注意一下幾點:
①使用*(unsigned char*)str1而不是用*str1。這是因為傳入的參數(shù)為有符號數(shù),有符號字符值的范圍是-128~127,無符號字符值的范圍是0~255,而字符串的ASCII沒有負值,若不轉(zhuǎn)化為無符號數(shù)這回在減法實現(xiàn)時出現(xiàn)錯誤。
②While循環(huán)中ret=*(unsigned char*)str1-*(unsigned char*)str2) *str1,最后與上str1也可以換成str2,因為前面已經(jīng)做了相減,無論哪個先為‘\0’都會退出。因為最后與上str1是為了判斷str1是否結(jié)束,即是否為‘\0’。
③這個函數(shù)沒有判斷參數(shù)為NULL時的情況,所以當(dāng)傳入NULL時程序會崩潰。網(wǎng)上看別人說商業(yè)化代碼都會在調(diào)用strcmp前先判斷是否為NULL,所以可以不用判斷NULL;我在VC6上測試string.h中的strcmp(NULL,NULL),程序也會崩潰。這里可以根據(jù)實際情況來決定。
參考資料來源:百度百科-strcmp函數(shù)
c風(fēng)格字符串是以'\0'為結(jié)束標(biāo)志的。如果你的name[10]沒有初始化,用scanf得到前3個字符為abc,后面的是隨機的,當(dāng)你使用strcmp(name,
"abc")的時候,有可能你的name低第四個字符正好是'\0',那么此時就是兩個相同,否則就是不同。
舉個例子
如果你的name的分布是"abc\0defghi";此時你使用strlen獲取他的長度將會是3,這就是c風(fēng)格字符串以'\0'結(jié)束,后面的就不考慮了,使用strcmp也是同樣的道理。
解決的辦法是你在name定義的時候初始化
兩種方法
1、char
name[10]
=
{0};
2、char
name[10];
memset(name,
0,
sizeof(name));
strcmp返回的實際上是兩個字符串中第一個不同的字符的ASCII碼的差,差大于0說明是關(guān)系,小于0則是關(guān)系.60,和1一樣是表示大于,而且返回ASCII碼的確切差值,可以方便用來實現(xiàn)一些其他的應(yīng)用,比只知道大于帶來了更多的信息
一.strcmp函數(shù)
strcmp函數(shù)是比較兩個字符串的大小,返回比較的結(jié)果。一般形式是:
i=strcmp(字符串,字符串);
其中,字符串1、字符串2均可為字符串常量或變量;i 是用于存放比較結(jié)果的整型變量。比較結(jié)果是這樣規(guī)定的:
①字符串1小于字符串2,strcmp函數(shù)返回一個負值;
②字符串1等于字符串2,strcmp函數(shù)返回零;
③字符串1大于字符串2,strcmp函數(shù)返回一個正值;
二,strcpy函數(shù)
strcpy函數(shù)用于實現(xiàn)兩個字符串的拷貝。一般形式是:
strcpy(字符中1,字符串2)
標(biāo)題名稱:c語言寫strcmp函數(shù) c語言strcmp
鏈接地址:http://jinyejixie.com/article10/dosgjdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、ChatGPT、網(wǎng)站維護、App開發(fā)、品牌網(wǎng)站制作、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)