C語言中關(guān)于sizeof 和 strlen的區(qū)別分析
1、編譯時計算運算符sizeof,可用類型或變量做參數(shù),計算占用內(nèi)存的大小。sizeof后若是類型必須加括弧,若是變量名可不加括弧。sizeof(x)可用來定義數(shù)組維數(shù)如:
printf("%d\n", sizeof(short));
輸出的結(jié)果為短整型的長度2。用結(jié)構(gòu)類型或變量做參數(shù)時,sizeof 返回實際的大小,當(dāng)用于靜態(tài)數(shù)組時,sizeof 返回全部數(shù)組的尺寸。sizeof 操作符不能返回動態(tài)地被分派了的數(shù)組或外部的數(shù)組的尺寸
2、運行時計算strlen,只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。計算的是字符串的長度。如:
char str[20]="0123456789";
int a=strlen(str); // 結(jié)果為a=10
int b=sizeof(str); // 結(jié)果b=20;
3、處理靜態(tài)數(shù)組:
char str[20]="0123456789";
int a=strlen(str); // a=10; strlen 計算字符串的長度,以\0'為字符串結(jié)束標(biāo)記。
int b=sizeof(str); // b=20; sizeof 計算的則是分配的數(shù)組str[20] 所占的內(nèi)存空間的大小,不受里面存儲的內(nèi)容影響。
4、處理指針:
char* ss = "0123456789";
sizeof(ss) // 結(jié)果4,
ss是指向字符串常量的字符指針,sizeof 獲得的是一個指針?biāo)嫉目臻g。sizeof(*ss) 結(jié)果1,*ss是第一個字符 其實就是獲得了字符串的第一位'0' 所占的內(nèi)存空間,是char類型的,占用1字節(jié)。strlen(ss)= 10,若要獲得這個字符串的長度,則一定要使用 strlen
以上所述就是關(guān)于sizeof 和 strlen區(qū)別的全部內(nèi)容了,希望大家能夠喜歡
相關(guān)文章
C++實現(xiàn)圖片轉(zhuǎn)base64的示例代碼
C語言實現(xiàn)Linux下的socket文件傳輸實例
C++連接mysql數(shù)據(jù)庫(改進(jìn)版)
C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程
C++設(shè)計與實現(xiàn)ORM系統(tǒng)實例詳解

