C語(yǔ)言中“不受限制”的字符串函數(shù)總結(jié)
“不受限制的“字符串函數(shù)
按《C和指針》中所說(shuō),那些常用的字符串函數(shù)都是“不是限制的”,就是說(shuō)它們只能通過(guò)尋找字符串末尾的NULL來(lái)判斷字符串的長(zhǎng)度。
strlen
strlen函數(shù)用于求解字符串長(zhǎng)度,其返回類型為unsigned int(即size_t)。strlen函數(shù)從起點(diǎn)開(kāi)始,往后計(jì)數(shù),遇到‘\0'停止。
值得注意的是:strlen函數(shù)的返回類型??慈缦麓a:
#include<string.h> #include<iostream> using namespace std; int main() { if ((strlen("abc") - strlen("abcdef")) > 0) cout << "大于" << endl; else cout << "小于" << endl; return 0; }
輸出 : 大于。不必驚奇,函數(shù)的size_t(-3)是一個(gè)正數(shù)。
strcpy
strcpy函數(shù)是字符串拷貝函數(shù)
函數(shù)原型為:
需要注意:目標(biāo)字符串是要可以更改的,空間要大,足夠存放拷貝的源字符串。
拷貝過(guò)程中,函數(shù)將源字符串的‘\0'一起拷貝到目標(biāo)中。
#include<string> #include<iostream> using namespace std; int main() { char arr[20] = "abcdefgh******"; char* p = "hello world"; strcpy(arr, p); cout << arr << endl; return 0; }
strcmp
strcmp函數(shù)為字符串比較函數(shù)。比較的不是字符串的長(zhǎng)度,而是對(duì)應(yīng)字符的ASCII值。
返回類型為:
#include<string> #include<iostream> using namespace std; int main() { char arr[] = "abcde"; char p[] = "abde"; cout << strcmp(arr,p) << endl; return 0; }
strcat
strcat函數(shù)為字符串追加函數(shù)。函數(shù)原型:
將源字符串追加到目標(biāo)字符串上。
int main() { char arr[20] = "abcde "; char p[] = "hello"; cout << strcat(arr, p) << endl; return 0; }
strstr
strstr為字符串查找函數(shù)。函數(shù)原型為:
在目標(biāo)字符串中查找子字符串,找的則返回指向子字符串的指針,否則返回空指針。
int main() { char arr[] = "hello, how are you ?"; char p[] = "are"; cout << strstr(arr, p) << endl; return 0; }
結(jié)果為:are you ?
strtok
strtok函數(shù)為字符串分隔函數(shù)。函數(shù)原型為:
strDelimit為字符串,定義了分隔字符的集合。函數(shù)執(zhí)行是遇到分割字符時(shí),將它改為‘\0',范圍一個(gè)指向這個(gè)標(biāo)記的指針。注意:strtok函數(shù)執(zhí)行時(shí)修改了字符串的內(nèi)容。
int main() { char str[] = "hello,how are you ?"; char * p; p = strtok(str, ",?"); while (p != NULL) { printf("%s\n", p); p = strtok(NULL, ",?"); } return 0; }
strerror
strerror函數(shù)的作用:返回錯(cuò)誤碼對(duì)應(yīng)的信息。函數(shù)原型為
使用時(shí)要包含#include<errno.h>
小結(jié)
這些“不受限制的”的字符串函數(shù),在執(zhí)行過(guò)程中,函數(shù)本身要尋找字符串結(jié)尾的'\0'來(lái)作為結(jié)束執(zhí)行標(biāo)志。如果找不到'\0',這函數(shù)執(zhí)行可能就會(huì)越界,得不到正確的結(jié)果。
到此這篇關(guān)于C語(yǔ)言中“不受限制”的字符串函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言不受限制字符串函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言中的函數(shù)指針學(xué)習(xí)筆記
這篇文章主要介紹了C語(yǔ)言中的函數(shù)指針的一些學(xué)習(xí)知識(shí)點(diǎn)記錄,文中作者整理了一些比較interesting的函數(shù)指針用法,需要的朋友可以參考下2016-04-04C/C++寬窄字符轉(zhuǎn)換與輸出的多種實(shí)現(xiàn)方法
本文主要介紹了C/C++寬窄字符轉(zhuǎn)換與輸出的多種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08C/C++實(shí)現(xiàn)圖書(shū)信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了c/c++實(shí)現(xiàn)圖書(shū)信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11淺談C++中thread庫(kù)join和detach的區(qū)別
這篇文章主要為大家介紹了C++中thread庫(kù)join和detach的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11C語(yǔ)言實(shí)現(xiàn)洗牌與發(fā)牌游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言洗牌與發(fā)牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12