十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
strlen實(shí)際上是,從參數(shù)表示的地址往后找,找到第一個'\0',即串尾。然后計算'\0'至首地址的“距離”,即隔了幾個字符,從而得出長度。
成都創(chuàng)新互聯(lián)公司擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊,在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十載,專業(yè)且經(jīng)驗(yàn)豐富。十載網(wǎng)站優(yōu)化營銷經(jīng)驗(yàn),我們已為成百上千中小企業(yè)提供了網(wǎng)站制作、成都做網(wǎng)站解決方案,定制設(shè)計,設(shè)計滿意,售后服務(wù)無憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!
char x[]={0xBC,0xDD,0xCA};中,實(shí)際上是定義了一個char型的數(shù)組,而由于x[0],即0xBC開始往后找,一直到0xCA,都沒'\0',所以會繼續(xù)往后。當(dāng)然,實(shí)際上往后找到的是其他值。
改char x[]={0xBC,0xDD,0xCA,0x00};后,應(yīng)該就是3了。
擴(kuò)展資料:
strlen所作的僅僅是一個計數(shù)器的工作,它從內(nèi)存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內(nèi)存區(qū)域)開始掃描,直到碰到第一個字符串結(jié)束符'\0'為止,然后返回計數(shù)器值(長度不包含'\0')。
函數(shù)原型
extern unsigned int strlen(char *s);
在Visual C++ 6.0或Dev-C++中,原型為
size_t strlen(const char *string);
,其中size_t實(shí)際上是unsigned int,在VC6.0或Dev-C++中可以看到這樣的代碼:
typedef unsigned int size_t;
頭文件:string.h或cstring
格式:strlen (字符數(shù)組名)
功能:計算給定字符串的(unsigned int型)長度,不包括'\0'在內(nèi)
說明:返回s的長度,不包括結(jié)束符NULL。
參考資料:strlen-百度百科
函數(shù)聲明:extern unsigned int strlen(char *s);
所屬函數(shù)庫:string.h
功能:返回s所指的字符串的長度,其中字符串必須以’\0’結(jié)尾
參數(shù):s為字符串的初始地址
使用舉例:
代碼如下
編譯運(yùn)行結(jié)果
說明:
函數(shù)strlen比較容易理解,其功能和sizeof很容易混淆。其中sizeof指的是字符串聲明后占用的內(nèi)存長度,它就是一個操作符,不是函數(shù);而strlen則是一個函數(shù),它從第一個字節(jié)開始往后數(shù),直到遇見了’\0’,則停止
第一 string頭文件中的函數(shù)strlen 只可以用來測試字符型數(shù)組的長度,其他類型不可以
第二 如果要測試int 修改原函數(shù)中的參數(shù),會導(dǎo)致數(shù)組長度變長(計算機(jī)會一直找下去,直到遇到\0)
第三 如果是字符數(shù)組,當(dāng)里面的字符數(shù)少于數(shù)組長度時,可以正常輸出用strlen,如果等于數(shù)組長度,則會出現(xiàn)問題
函數(shù)介紹:
(推薦教程:c語言教程)
strlen()函數(shù)用于計算字符串的長度,直到空結(jié)束字符,但不包括空結(jié)束字符。
語法結(jié)構(gòu):
size_t strlen(const char *str)
參數(shù)說明:
str -- 要計算長度的字符串。
返回值:
該函數(shù)返回字符串的長度
strlen()只是統(tǒng)計字符串的長度,統(tǒng)計到'\0'結(jié)束,但不包括'\0',這個與sizeof()不一樣。
對于用雙引號引起來的字符串,系統(tǒng)默認(rèn)最后一位字符為'\0',如你自己定義的:
char a[]="china";
char b[]={"china"};
另外,數(shù)組初始化還可以是一個字符一個字符賦值,如:
char c[]={'c','h','i','n','a'};
char d[]={'c','h','i','n','a','\0'};
但系統(tǒng)不會自動給你在最末位添加'\0’
所以在統(tǒng)計char c[]={'c','h','i','n','a'}時,統(tǒng)計到a時,系統(tǒng)還沒找到\0,所以會繼續(xù)統(tǒng)計,直到找到'\0'為止。所以就有你第三個值為11的情況,這個根據(jù)不同的運(yùn)行環(huán)境而定。
strlen:計算字符串長度的庫函數(shù)名。
str:通常,程序員喜歡用它作 字符串 變量名。它是string(英文詞字符串的縮寫)。
len:通常,程序員喜歡用它作 變量名。它是 length(英文詞長度的縮寫)。
例如:
char str[20]="I am a student";
int len;
len = strlen(str);
printf("the string length is: %d",len);
擴(kuò)展資料:
函數(shù)原型
extern?unsigned?int?strlen(char?*s);
在Visual C++ 6.0或Dev-C++中,原型為size_t?strlen(const?char?*string);,其中size_t實(shí)際上是unsigned int,在VC6.0或Dev-C++中可以看到這樣的代碼:
typedef?unsigned?int?size_t;
頭文件:string.h或cstring
格式:strlen (字符指針表達(dá)式)
功能:計算給定字符串的(unsigned int型)長度,不包括'\0'在內(nèi)
說明:返回s的長度,不包括結(jié)束符NULL。
strlen(char*)函數(shù)求的是字符串的實(shí)際長度,它求得方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結(jié)果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。
參考資料來源:百度百科-strlen (C/C++語言函數(shù))