1. 程式人生 > 其它 >strlen與sizeof

strlen與sizeof

技術標籤:C語言拾遺字串c語言

文章目錄

strlen

strlen所作的是一個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符’\0’為止,然後返回計數器值(長度不包含’\0’)

  • 標頭檔案:string.h或cstring
  • 格式:strlen (字元指標表示式)
  • 功能:計算給定字串的(unsigned int型)長度,不包括’\0’在內
  • 說明:返回s的長度,不包括結束符NULL

sizeof

在 C 語言中,sizeof() 是一個判斷資料型別或者表示式長度的運算子

,對 sizeof() 的處理都是在編譯階段進行

  • 格式:sizeof (型別說明符)
  • 功能:返回一個物件或者型別所佔的記憶體位元組數

strlen與sizeof的區別

  1. sizeof是取位元組運算子(關鍵字),strlen是一個函式
  2. strlen返回的是字串的實際長度(不包含’\0’),sizeof返回的是所佔的記憶體位元組數
	char s[10] = "hello";
	cout << strlen(s) << endl; //5
	cout << sizeof(s) << endl; //10
  1. 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
  1. sizeof在編譯時就已經計算完成,strlen在執行時才進行計算
  2. 因為sizeof在編譯時就已經計算完成,所以可以用來作為常量表達式使用
char ary[sizeof(int) * 10];
cout << sizeof(ary) << endl; //40