2 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
strlen函數(shù)所作的僅僅是一個(gè)計(jì)數(shù)器的工作,它從內(nèi)存的某個(gè)位置(可以是字符串開頭,中間某個(gè)位置,甚至是某個(gè)不確定的內(nèi)存區(qū)域)開始掃描,直到碰到第一個(gè)字符串結(jié)束符'\0'為止,然后返回計(jì)數(shù)器值(長度不包含"\0")。
基本簡介
原型:extern unsigned int strlen(char *s);,在Visual C++ 6.0中,原型為size_t strlen(const char *string);,其中size_t實(shí)際上是unsigned int,在VC6.0中可以看到這樣的代碼:typedef unsigned int size_t;
頭文件:string.h
格式:strlen (字符數(shù)組名)
功能:計(jì)算字符串s的(unsigned int型)長度,不包括'\0'在內(nèi)
說明:返回s的長度,不包括結(jié)束符NULL。
相關(guān)函數(shù):
TCHAR.H routine _UNICODE & _MBCS not defined_MBCS defined_UNICODE defined_tcslen
程序舉例
舉例1:(在Visual C++6.0中運(yùn)行通過)
#include <string.h>
#include<stdio.h>
int main(void)
{
char *s="Golden Global View";
printf("%s has %d chars",s,strlen(s));
getchar();
return 0;
}

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
1.xx[2][8]的內(nèi)存是連續(xù)分配的
2.
01234567
0dAe,BfC.
1CCbbAA\0
本來在第一行最后應(yīng)該是\0的,但是位置占滿了,所以\0就到第二行了(由于內(nèi)存的連續(xù)分配)
但是繼續(xù)向第二行寫數(shù)據(jù)的時(shí)候,C就把第一行的\0覆蓋了,到最后再加上第二的\0
而strlen只認(rèn)起始字符d然后開始數(shù),直到\0為止
所以把dAe,BfC.CCbbAA都數(shù)上了,數(shù)到第二行的\0結(jié)束,所以是14個(gè)
添加回答
舉報(bào)