1. 程式人生 > >sizeof與strlen的區別

sizeof與strlen的區別

一、基本定義

1、sizeof是C/C++中的一個運算子,其作用是返回一個物件或者型別在記憶體中所佔用的位元組數。

    注意:sizeof後面如果是型別則必須加括號,如 sizeof(char);而如果是變數名則可以不加括號,如 sizeof a; 但是建議使用時  均加上括號。sizeof不能返回動態地被分配的陣列的大小。

2、strlen是C語言中的庫函式,所在標頭檔案為#include <string.h>其函式原型為unsigned int strlen(char *s); 其中s為指定的字串。

   注意:strlen只能用char *作為引數,它求的是字串的實際長度,方法是從開始到遇到第一個'\0'結束。

二、幾個例子

例1:

  1. char str[20] = "0123456789";
  2. int a = strlen(str); /*a = 10*/
  3. int b = sizeof(str);/*b = 20*/

上面結果為a = 10,這是因為strlen計算的是字串的實際長度,以第一個'\0'為結束符;b = 20,這是因為sizeof計算的是分配的陣列str[20]所佔的空間大小,不受裡面儲存內容的影響。

例2:

  1. char *ss = "0123456789";
  2. int i = sizeof(ss); /*i = 4*/
  3. int j = sizeof(*ss); /*j = 1*/
  4. int k = strlen(ss); /*k = 10*/

上面結果為i = 4,這是因為sizeof獲得的是一個指標的值所佔的地址空間,為long int型的,佔4個位元組;j = 1,這是因為 *ss 為第一個字元 '0' 所以佔一個位元組;k = 10,這是因為strlen所獲得的是此字串的實際長度,所以要想獲得此字串的長度,則一定要用strlen。

例3:

  1. char buffer[] = "Hello";
  2. int m = strlen(buffer); /*m = 5*/
  3. int n = sizeof(buffer); /*n = 6*/
上面結果為m = 5,這是因為strlen測量的是字串的實際長度,以遇到的第一個'\0'為結束標誌;n = 6,這是因為字串以'\0'為結束標誌,'\0'也需要佔用一個位元組,所以sizeof測得的結果為6。

------------------------------------------------The end------------------------------------------------------