strlen與sizeof
阿新 • • 發佈:2021-02-07
文章目錄
strlen
strlen所作的是一個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符’\0’為止,然後返回計數器值(長度不包含’\0’)
- 標頭檔案:string.h或cstring
- 格式:strlen (字元指標表示式)
- 功能:計算給定字串的(unsigned int型)長度,不包括’\0’在內
- 說明:返回s的長度,不包括結束符NULL
sizeof
在 C 語言中,sizeof() 是一個判斷資料型別或者表示式長度的運算子
- 格式:sizeof (型別說明符)
- 功能:返回一個物件或者型別所佔的記憶體位元組數
strlen與sizeof的區別
- sizeof是取位元組運算子(關鍵字),strlen是一個函式
- strlen返回的是字串的實際長度(不包含’\0’),sizeof返回的是所佔的記憶體位元組數
char s[10] = "hello";
cout << strlen(s) << endl; //5
cout << sizeof(s) << endl; //10
- sizeof可以使用函式,指標等做引數,strlen只能使用char*做引數(結尾必須為’\0’,否則就會一直在記憶體中移動,直到遇到’\0’)
int fuc() {
int tmp_1 = 1;
int tmp_2 = 2;
return tmp_1;
}
void main() {
char s[10] = "hello";
char *ch;
cout << strlen(s) << endl; //5
cout << sizeof(s) << endl; //10
cout << sizeof(fuc()) << endl; //4
cout << sizeof(ch) << endl; //4
}
對指標求sizeof時,指標大小與平臺有關,32位系統下為4位元組,64位系統下為8位元組
char *ch;
int *i;
cout << sizeof(ch) << endl; //4
cout << sizeof(i) << endl; //4
對引用求sizeof時,結果是引用指向物件的實際大小(與對指標求sizeof結果不同)
struct S {
char ch;
int i;
};
S& temp = *new S;
char *ch;
cout << sizeof(temp) << endl; //8
cout << sizeof(ch) << endl; //4
對結構體求sizeof時,需考慮記憶體對齊
struct S {
char ch;
int i;
};
cout << sizeof(S) << endl; //8
- sizeof在編譯時就已經計算完成,strlen在執行時才進行計算
- 因為sizeof在編譯時就已經計算完成,所以可以用來作為常量表達式使用
char ary[sizeof(int) * 10];
cout << sizeof(ary) << endl; //40