本篇文章給大家分享的是有關(guān)C語(yǔ)言中strlen函數(shù)如何使用,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)南靖,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
C語(yǔ)言中的字符串函數(shù)有如下這些
獲取字符串長(zhǎng)度
strlen
長(zhǎng)度不受限制的字符串函數(shù)
strcpy
strcat
strcmp
長(zhǎng)度受限制的字符串函數(shù)
strncpy
strncat
strncmp
字符串查找
strstr
strtok
錯(cuò)誤信息報(bào)告
strerror
接下來(lái)看看如何實(shí)現(xiàn)它們
我們看看文檔是怎樣說(shuō)的,如下
strlen文檔
size_t strlen ( const char * str );Get string length
獲取字符串長(zhǎng)度
Returns the length of the C string str.
返回C字符串str的長(zhǎng)度
The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself).
C字符串長(zhǎng)度是由'\0'來(lái)確定的,也就是說(shuō)從字符串的第一個(gè)開(kāi)始只要遇到'\0'就結(jié)束長(zhǎng)度計(jì)算(不包含'\0')
This should not be confused with the size of the array that holds the string. For example:
不用困惑你創(chuàng)建的數(shù)組的大小,比如這樣
char mystr[100]="test string";defines an array of characters with a size of 100
char
s, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, whilesizeof(mystr)
evaluates to100
,strlen(mystr)
returns11
.定義一個(gè)大小為100的數(shù)組
mystr
,然后mystr
就已經(jīng)被初始化為一個(gè)長(zhǎng)度為11的字符串了。所以呢,sizeof(mystr)
會(huì)得出100
, 而strlen(mystr)
會(huì)返回11
.
綜上,可以知道
字符串已經(jīng) '\0' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 '\0' 前面出現(xiàn)的字符個(gè)數(shù)(不包含 '\0' )。
該函數(shù)只認(rèn)'\0',參數(shù)指向的字符串必須要以 '\0' 結(jié)束。
注意函數(shù)的返回值為size_t,是無(wú)符號(hào)的
strlen函數(shù)的實(shí)現(xiàn)有好幾種。
比如
計(jì)數(shù)器的方法
遞歸
指針 - 指針
接下來(lái)一一實(shí)現(xiàn)。
斷言指針不為空是個(gè)好習(xí)慣~
int my_strlen(char* str) { int count = 0; assert(str != NULL); while (*str != '\0') // while (*str) { count++; str++; } return count; }
就一直找'\0',當(dāng)*str不是'\0'時(shí),就count++,str++,直到遇到'\0'停止,然后返回count就是長(zhǎng)度了。
斷言指針不為空是個(gè)好習(xí)慣~
int my_strlen(char* str) { assert(str != NULL); char* p = str; while(*p == '\0') { return 0; } return 1 + my_strlen(p + 1); }
比如傳入的str地址為 1000
那么 1 + my_strlen(p + 1) 中,p + 1,指針偏移后就是1001,以此類推。
1 + 1 + my_strlen(p + 1)
1 + 1 + 1 + my_strlen(p + 1)
1 + 1 + 1 + 1 + my_strlen(p + 1)
...
1 + 1 + 1 + 1 + ... + 0
最終就可以得出長(zhǎng)度。
斷言指針不為空是個(gè)好習(xí)慣~
int my_strlen(char* str) { assert(str != NULL); char* p = str; while (*p != '\0') { p++; } return p - str; }
把指針str的地址賦值給一個(gè)新的指針p,str作為指向起始地址的指針,不改變它,記錄起始地址。
然后通過(guò)指針p進(jìn)行查找'\0',判斷當(dāng)前字符是否為'\0',不是就進(jìn)行p++,然后繼續(xù)判斷下一個(gè)字符,如此循環(huán),直到指針p找到'\0',然后用 當(dāng)前的指針p減去 起始指針str進(jìn)行返回,就是長(zhǎng)度了。
以上就是C語(yǔ)言中strlen函數(shù)如何使用,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。