1. 程式人生 > >老生常談的sizeof( )和strlen( )的差異

老生常談的sizeof( )和strlen( )的差異

sizeof()和strlen()區別

1、編譯時計算運算子sizeof,可用型別或變數做引數,計算佔用記憶體的大小。sizeof後若是型別必須加括弧,若是變數名可不加括弧。sizeof(x)可用來定義陣列維數如:

printf("%d\n", sizeof(short));

輸出的結果為短整型的長度2。用結構型別或變數做引數時,sizeof 返回實際的大小,當用於靜態陣列時,sizeof 返回全部陣列的尺寸。sizeof 操作符不能返回動態地被分派了的陣列或外部的陣列的尺寸
2、執行時計算strlen,只能用char*做引數,且必須是以”\0”結尾的。計算的是字串的長度。如:

char
str[20]="0123456789"; int a=strlen(str); // 結果為a=10 int b=sizeof(str); // 結果b=20;

3、處理靜態陣列:

char str[20]="0123456789"; 
int a=strlen(str); // a=10; strlen 計算字串的長度,以\0'為字串結束標記。 
int b=sizeof(str); // b=20; sizeof 計算的則是分配的陣列str[20] 所佔的記憶體空間的大小,不受裡面儲存的內容影響。

4、處理指標:

char* ss = "0123456789"; 
sizeof(ss) // 結果4,

ss是指向字串常量的字元指標,sizeof 獲得的是一個指標所佔的空間。sizeof(*ss) 結果1,*ss是第一個字元 其實就是獲得了字串的第一位’0’ 所佔的記憶體空間,是char型別的,佔用1位元組。strlen(ss)= 10,若要獲得這個字串的長度,則一定要使用 strlen

轉載,感謝源作者的分享
第一次用markdown

相關推薦

老生常談sizeof( )strlen( )的差異

sizeof()和strlen()區別 1、編譯時計算運算子sizeof,可用型別或變數做引數,計算佔用記憶體的大小。sizeof後若是型別必須加括弧,若是變數名可不加括弧。sizeof(x)可用來定義陣列維數如: printf("%d\n", size

sizeofstrlen

傳遞 內容 mem 功能 參考資料 blog 靜態數組 字符型 全部 Sizeof與Strlen的區別與聯系 一、sizeof sizeof(...)是運算符,在頭文件中typedef為unsigned int,其值在編譯時即計算好了,參數可以是數組、指針、類型、對

sizeof strlen 的區別

一位 分派 strong 字符串數組 大對象 是個 原因 靜態 定義 Sizeof與Strlen的區別與聯系(轉)1.sizeof操作符的結果類型是size_t,它在頭文件中typedef為unsigned int類型。該類型保證能容納實現所建立的最大對象的字節大小。 2.

C語言中,當計算字符數組長度時,用sizeof strlen 的原理及兩者的區別

指針 data- 編譯器 tracking 行處理 ews csdn 編譯 分配 字符數組的長度計算:必須以終止符’\0‘作為邊界,但對字符數組賦值時,有兩種方式: 1:定義時用字符初始化 (1)char chs[7] = {‘a‘, ‘c‘, ‘0‘, ‘z‘, ‘3

sizeofstrlen的理解

對於sizeof和strlen的瞭解    對sizeof做一個官方的認識:sizeof() 是一種記憶體容量度量函式,功能是返回一個變數或者型別的大小(以位元組為單位);C語言中,sizeof() 是一個判斷資料型別或者表示式長度的運算子。 strlen所作的僅僅是一個計數

面試題3——sizeofstrlen的區別

sizeof和strlen有如下區別: (1)sizeof是一個操作符,strlen是庫函式; (2)sizeof的引數可以是資料的型別,也可以是變數,而strlen只能以結尾為’\0’的字串做引數; (3)編譯器在編譯時就計算出了sizeof的結果。而strlen函式必須在執行時才能計算出

sizeofstrlen的區別

原文連結: sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以"\0"結尾。 一、sizeof sizeof(…)是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時

sizeofstrlen的區別。

sizeof和strlen的區別: 區別: 一、定義不同 1、sizeof是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。 2、它的功能是:獲得保證能容納實現所建立的最大物件的位元

php擴充套件開發筆記(9)sizeof strlen 遇到空字元 '\0' 的問題

看看下面程式碼的不同表現 #include <stdio.h> #include <stdlib.h> #include <string.h> int m

sizeofstrlen的區別及使用詳解

首先我們來看一下sizeof和strlen的區別: sizeof操作符的結果型別為size_t(The sizeof keyword gives the amount of storage, in bytes, associated with a varia

sizeofstrlen的區別,陣列指標的區別

sizeof和strlen的區別: 1.sizeof是個關鍵字,因此,sizeof後面是變數名時可以不加括號,而strlen是個函式,必須加括號 2.sizeof是判斷引數所佔的記憶體大小,引數可以是型別,函式,而strlen有點像計數器,從某個記憶體地址開始計數,碰到"\

sizeofstrlen區別以及使用情況分析

實際做開發專案中,如果有涉及到字元資料處理等情況,都會遇到資料長度的獲取。比如現在需要對a[50]陣列進行賦值1~50的指定資料,程式碼如下: char a[50]; for(i = 0 ; i <50 ; i++) { a[i]=i+1; }

結構體的大小以及sizeof()strlen()的區別

一: sizeof運算子,可用於任何變數名,型別名或常量值,當用於用於變數名(不是陣列名)或常量時,它不需要圓括號。它在編譯時起作用,而不是執行時。   PS: 求結構體的sizeof()大小有兩個規則(記憶體對齊): 1.:上一個變數是下一個變數的整數倍。 2.:

sizeofstrlen、32位64位系統各型別的長度

sizeof:申請了多少記憶體空間或者,例如char a[20],sizeof(a)=20。若為char a[],他的大小應該為使用了多少大小就為多少。 strlen計算字元陣列的長度時,是以找到0或者\0作為終止。若末尾沒有0或者\0作為結束,則不會計算出正確的字元陣

sizeofstrlen()區別及用法

//sizeof是以位元組為單位計算變數或型別所佔記憶體大小,它是屬於C語言運算子系列;而strlen()是一個函式,是計算字串長度(也是以位元組為單位,但略有區別);比如: char array[] = {"ILOVE"}; printf("%d", strlen(array)); //值為5

面試常客2---sizeofstrlen的前世今生

char str[20]="0123456789";  int   a=strlen(str); /*a=10;strlen 計算字串的長度,以\0'為字串結束標記。  int   b=sizeof(str); /*b=20;siz

芒果iOS開發sizeofstrlen的區別

在C語言中sizeof()函式和strlen()函式都可以求字串長度,那麼這兩個函式有什麼區別呢,下邊為大家介紹: 首先定義一個字元陣列: <span style="font-size:18p

字串字元陣列的區別以及sizeofstrlen的區別

一、sizeof     sizeof是運算子,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。     由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、

關於sizeofstrlen的區別用法

       一.需要明確strlen()是個字串函式,是統計一個字串從開始到"/0"(字串結束)之間字元的個數(不包含"/0")。字串可以是char *str1 = "asdaff";   也可以是

C-sizeofstrlen區別,以及sizeof如何計算結構體大小

struct alt inf 編譯 style img com 大小 運行 sizeof和strlen區別 sizeof是關鍵字,在編譯時就能計算出值,可以計算任何類型 strlen是函數,只有在運行時才能去計算,且只能計算字符型的. 對於數組時,strlen