C語(yǔ)言中sizeof和strlen的區(qū)別詳解
一.sizeof和strlen的主要區(qū)別
1.sizeof 是運(yùn)算符,而strlen 是C語(yǔ)言庫(kù)函數(shù)中的一個(gè)函數(shù)(使用時(shí)包含頭文件(string.h));
對(duì)于sizeof來(lái)說(shuō),使用時(shí)不加()也是正確的,這樣也可以說(shuō)明sizeof不是函數(shù)
2.sizeof 操作符用于計(jì)算變量或類(lèi)型的大小,一般單位為字節(jié),通常用于計(jì)算內(nèi)存大小。
3.strlen是計(jì)算字符串長(zhǎng)度的,遇到\0結(jié)束,返回不包括\0,即如果沒(méi)有\(zhòng)0則會(huì)計(jì)算出隨機(jī)值;
二.sizeof和strlen分別講解(含例題和詳解)
1.sizeof
在計(jì)算字符型數(shù)組時(shí)(例題+講解)
如代碼:char arr1 []="hello bite!" 因?yàn)樽址┪矔?huì)自動(dòng)添加\0作為結(jié)束標(biāo)志 所以這個(gè)字符串實(shí)際是 “hello bite!\0” 其中一個(gè)字符占一個(gè)字節(jié),空格和\0也各占一個(gè)字節(jié) 一共就是12個(gè)字節(jié);
代碼:
int main() { char arr[] = "hello bite!"; int ret = sizeof(arr); printf("%d\n",ret); return 0; }
運(yùn)行結(jié)果是:
計(jì)算整型數(shù)組(例題+講解)
如代碼:int arr2 [5]={0};因?yàn)槭钦?,所以一個(gè)元素占4個(gè)字節(jié)(一個(gè)整型所占大?。?;數(shù)組大小就是 元素個(gè)數(shù)×4 即arr2所占大小是5×4=20個(gè)字節(jié)
代碼:
int main() { int arr[5] = { 0 }; int ret=sizeof(arr); printf("arr所占內(nèi)存大小為:%d字節(jié)\n",ret); return 0; }
運(yùn)行結(jié)果:
2.strlen
3.strlen是計(jì)算字符串長(zhǎng)度的,遇到\0結(jié)束,返回不包括\0,即如果沒(méi)有\(zhòng)0則會(huì)計(jì)算出隨機(jī)值;
例子一(講解):
char arr[]="abcdefg"; 實(shí)際字符串內(nèi)容為 "abcdefg\0" 即strlen所計(jì)算的是\0之前的"abcdefg",即算出字符串長(zhǎng)度為7個(gè)字符;
#include <string.h> int main() { char arr[] = "abcdefg"; int len = strlen(arr); printf("字符串長(zhǎng)度為:%d個(gè)字符\n",len); return 0; }
運(yùn)行結(jié)果:
例子二(講解)
char arr[]={ 'a' , 'b' , 'c', 'd' , 'e' , 'f' , 'g' }; 該字符數(shù)組中放入的是 a b c d e f g 這7個(gè)字符;因?yàn)椴皇亲址?,所以末尾沒(méi)有\(zhòng)0;沒(méi)有\(zhòng)0,當(dāng)使用strlen函數(shù)進(jìn)行計(jì)算是就不知道在哪里結(jié)束;計(jì)算結(jié)果就是我們想不到的隨機(jī)值(如下面的運(yùn)行結(jié)果14028835)意思是當(dāng)使用strlen函數(shù)進(jìn)行計(jì)算時(shí),當(dāng)計(jì)算完arr數(shù)組時(shí),因?yàn)闆](méi)遇到\0,所以還要繼續(xù)往后計(jì)算,(這里直到計(jì)算了14028835個(gè)字符后)才遇到\0結(jié)束;
代碼:
#include <string.h> int main() { char arr[] = { 'a','b','c','d','e','f','g' }; int len = strlen(arr); printf("arr的長(zhǎng)度為:%d字符\n"); return 0; }
運(yùn)行結(jié)果:
三.典型例題
例1
答案解析:
str字符數(shù)組使用"hello bit"初始化,最終也會(huì)將'\0'放置到數(shù)組中,因此數(shù)組中總共有10個(gè)元素
sizeof(str):獲取數(shù)組的總大小,10個(gè)元素,每個(gè)元素占1個(gè)字節(jié),因此總共是10個(gè)字節(jié)
strlen(str): 獲取字符串中有效字符的個(gè)數(shù),不算'\0',因此總共9個(gè)有效字符
故上述printf會(huì)分別打?。?0 9
因此,選擇A
例2
答案解析:
對(duì)于int arr[] = {1,2,(3,4),5}數(shù)組,里面總共有4個(gè)元素,(3,4)為逗號(hào)表達(dá)式,取后者,因此數(shù)組中元素分別為:1,2,4,5
而sizeof(arr)求的是整個(gè)數(shù)組所占空間的大小,即:4*sizeof(int)=4*4=16
因此,選擇B
到此這篇關(guān)于C語(yǔ)言中sizeof和strlen的區(qū)別詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言 sizeof和strlen區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言sizeof和strlen區(qū)別小結(jié)
- C語(yǔ)言中的strlen()和sizeof()對(duì)比分析
- C語(yǔ)言之sizeof與strlen的使用及區(qū)別
- 淺談C語(yǔ)言中的sizeof()和strlen()的區(qū)別
- 關(guān)于C語(yǔ)言strlen與sizeof區(qū)別詳情
- C語(yǔ)言入門(mén)篇--sizeof與strlen基礎(chǔ)理論
- C語(yǔ)言中sizeof()與strlen()的區(qū)別詳解
- C語(yǔ)言中sizeof()與strlen()函數(shù)的使用入門(mén)及對(duì)比
- C語(yǔ)言中關(guān)于sizeof 和 strlen的區(qū)別分析
- C語(yǔ)言中sizeof 和 strlen的區(qū)別
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(33.在旋轉(zhuǎn)有序數(shù)組中搜索)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(33.在旋轉(zhuǎn)有序數(shù)組中搜索),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07利用Qt實(shí)現(xiàn)FTP服務(wù)器并支持多客戶端登錄
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)FTP服務(wù)器并支持多客戶端登錄,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12C++實(shí)現(xiàn)十大排序算法及排序算法常見(jiàn)問(wèn)題
法是程序的靈魂,無(wú)論學(xué)習(xí)什么語(yǔ)言,做什么工程項(xiàng)目,都要考慮算法的效率實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)十大排序算法及排序算法常見(jiàn)問(wèn)題的相關(guān)資料,需要的朋友可以參考下2021-09-09Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測(cè)的示例
本文主要介紹了Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測(cè)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08C++實(shí)現(xiàn)的O(n)復(fù)雜度內(nèi)查找第K大數(shù)算法示例
這篇文章主要介紹了C++實(shí)現(xiàn)的O(n)復(fù)雜度內(nèi)查找第K大數(shù)算法,結(jié)合實(shí)例形式分析了算法的原理以及具體實(shí)現(xiàn)方法,需要的朋友可以參考下2017-08-08