C語言中sizeof和strlen的區(qū)別詳解
一.sizeof和strlen的主要區(qū)別
1.sizeof 是運算符,而strlen 是C語言庫函數中的一個函數(使用時包含頭文件(string.h));
對于sizeof來說,使用時不加()也是正確的,這樣也可以說明sizeof不是函數
2.sizeof 操作符用于計算變量或類型的大小,一般單位為字節(jié),通常用于計算內存大小。
3.strlen是計算字符串長度的,遇到\0結束,返回不包括\0,即如果沒有\(zhòng)0則會計算出隨機值;
二.sizeof和strlen分別講解(含例題和詳解)
1.sizeof
在計算字符型數組時(例題+講解)
如代碼:char arr1 []="hello bite!" 因為字符串末尾會自動添加\0作為結束標志 所以這個字符串實際是 “hello bite!\0” 其中一個字符占一個字節(jié),空格和\0也各占一個字節(jié) 一共就是12個字節(jié);
代碼:
int main() { char arr[] = "hello bite!"; int ret = sizeof(arr); printf("%d\n",ret); return 0; }
運行結果是:
計算整型數組(例題+講解)
如代碼:int arr2 [5]={0};因為是整型,所以一個元素占4個字節(jié)(一個整型所占大小);數組大小就是 元素個數×4 即arr2所占大小是5×4=20個字節(jié)
代碼:
int main() { int arr[5] = { 0 }; int ret=sizeof(arr); printf("arr所占內存大小為:%d字節(jié)\n",ret); return 0; }
運行結果:
2.strlen
3.strlen是計算字符串長度的,遇到\0結束,返回不包括\0,即如果沒有\(zhòng)0則會計算出隨機值;
例子一(講解):
char arr[]="abcdefg"; 實際字符串內容為 "abcdefg\0" 即strlen所計算的是\0之前的"abcdefg",即算出字符串長度為7個字符;
#include <string.h> int main() { char arr[] = "abcdefg"; int len = strlen(arr); printf("字符串長度為:%d個字符\n",len); return 0; }
運行結果:
例子二(講解)
char arr[]={ 'a' , 'b' , 'c', 'd' , 'e' , 'f' , 'g' }; 該字符數組中放入的是 a b c d e f g 這7個字符;因為不是字符串,所以末尾沒有\(zhòng)0;沒有\(zhòng)0,當使用strlen函數進行計算是就不知道在哪里結束;計算結果就是我們想不到的隨機值(如下面的運行結果14028835)意思是當使用strlen函數進行計算時,當計算完arr數組時,因為沒遇到\0,所以還要繼續(xù)往后計算,(這里直到計算了14028835個字符后)才遇到\0結束;
代碼:
#include <string.h> int main() { char arr[] = { 'a','b','c','d','e','f','g' }; int len = strlen(arr); printf("arr的長度為:%d字符\n"); return 0; }
運行結果:
三.典型例題
例1
答案解析:
str字符數組使用"hello bit"初始化,最終也會將'\0'放置到數組中,因此數組中總共有10個元素
sizeof(str):獲取數組的總大小,10個元素,每個元素占1個字節(jié),因此總共是10個字節(jié)
strlen(str): 獲取字符串中有效字符的個數,不算'\0',因此總共9個有效字符
故上述printf會分別打?。?0 9
因此,選擇A
例2
答案解析:
對于int arr[] = {1,2,(3,4),5}數組,里面總共有4個元素,(3,4)為逗號表達式,取后者,因此數組中元素分別為:1,2,4,5
而sizeof(arr)求的是整個數組所占空間的大小,即:4*sizeof(int)=4*4=16
因此,選擇B
到此這篇關于C語言中sizeof和strlen的區(qū)別詳解的文章就介紹到這了,更多相關C語言 sizeof和strlen區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!