0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言中strlen和sizeof的區(qū)別

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-04-23 09:45 ? 次閱讀

如果你經(jīng)常刷筆試題,那你一定會刷到這樣的題目:

char str[] = “hello”;
printf(“%d %d
”, sizeof(str), strlen(str));


const char *str = “hello”;
printf(“%d %d
”, sizeof(str), strlen(str));


把 sizeof 和 strlen 放在一起考察,題目不難,只要你的C語言基本功扎實,做出來應(yīng)該沒問題。

第一個,str是個數(shù)組,數(shù)組里面的內(nèi)容是字符串hello。但是需要注意的是,字符串都是以'?'結(jié)尾,所以數(shù)組實際占6個字節(jié)。

sizeof是關(guān)鍵字,用于求解類型的長度,sizeof加上數(shù)組名,表示數(shù)組所占的字節(jié)數(shù),所以結(jié)果是6。

strlen是字符串處理函數(shù),求解字符串的長度,長度不包含'?',所以結(jié)果是5。

第二個,str是指針,指向字符串常量。

sizeof加上指針,表示指針變量占的字節(jié)數(shù),32位系統(tǒng)是4字節(jié),64位系統(tǒng)是8字節(jié)。至于說字符串長度,跟上面一樣,是5個字節(jié)。

這些都算是常見的,我們再來看下不常見的,指針都當作8字節(jié)來處理。
int a[] = {1, 2, 3}; 


printf("%ld
",sizeof(&a));
printf("%ld
",sizeof(*a));


intb[2][3]={0};
printf("%ld
",sizeof(b[0]));
printf("%ld
",sizeof(b[0]+1));
printf("%ld
",sizeof(&b[0]));


一個一維數(shù)組,&a表示數(shù)組的地址,sizeof(&a)是8字節(jié)。

*a表示數(shù)組第一個元素,sizeof(*a)是4個字節(jié)。

對于二維數(shù)組,b[0]表示首行首元素地址,類似于一維數(shù)組的數(shù)組名,sizeof(b[0])就是第一行的長度12字節(jié)。

b[0]+1表示首行第二個元素的地址,編譯器當作指針來處理,sizeof(b[0] + 1)是8個字節(jié)。

&b[0]表示數(shù)組首行地址,編譯器同樣把它當作指針來處理,sizeof(&b[0])也是8字節(jié)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136863
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    579

    瀏覽量

    20519
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4331

    瀏覽量

    62633
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    480

    瀏覽量

    70564
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    417

    瀏覽量

    25949

原文標題:strlen和sizeof

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言中void指針的基本認識及典型應(yīng)用

    C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種類型*類型的。
    發(fā)表于 02-01 09:26 ?1101次閱讀

    C語言sizeofstrlen區(qū)別

    大家好,我是嵌入式老林,從事嵌入式軟件開發(fā)多年,今天分享的內(nèi)容是C語言sizeofstrlen區(qū)別,希望能對你有所幫助
    發(fā)表于 07-11 11:51 ?1425次閱讀

    C語言中for循環(huán)的用法和應(yīng)用 C語言中for循環(huán)與while循環(huán)的區(qū)別

    C語言中的循環(huán)結(jié)構(gòu)時,for循環(huán)是最常用的一種。它允許重復執(zhí)行一段代碼,直到滿足特定條件為止。
    發(fā)表于 08-18 16:33 ?3262次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)的用法和應(yīng)用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)與while循環(huán)的<b class='flag-5'>區(qū)別</b>

    strlensizeof區(qū)別

    1.strlen(char*)函數(shù)求的是字符串的實際長度,它求得方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結(jié)果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。char aa[10];cout
    發(fā)表于 02-10 10:44

    【求助】C語言中sizeof使用錯誤

    ();printf("output\n");printf("%d",sizeof('c'));printf("%d",sizeof(string1
    發(fā)表于 11-08 11:26

    c語言中double與float的區(qū)別 相關(guān)資料分享

    c語言中double與float的區(qū)別C語言中小數(shù)的數(shù)據(jù)類型為 float 或 double:float 稱為單精度浮點數(shù),double 稱
    發(fā)表于 07-01 09:10

    c語言中double與float區(qū)別是什么?

    c語言中double與float區(qū)別是什么?
    發(fā)表于 10-14 07:58

    sizeofstrlen函數(shù)的區(qū)別在哪

    野指針是指指針指向的位置是不可知的,主要成因是什么?sizeofstrlen函數(shù)的區(qū)別在哪?鏈表和數(shù)組的區(qū)別在哪?
    發(fā)表于 12-24 07:19

    C語言中的關(guān)鍵字

    C語言中的入門教程
    發(fā)表于 10-14 16:24 ?3次下載

    C51單片機C語言與標準C語言有什么區(qū)別?

    一:C51(單片機C語言)與標準C語言區(qū)別1、 C
    發(fā)表于 10-09 08:00 ?134次下載
    <b class='flag-5'>C</b>51單片機<b class='flag-5'>C</b><b class='flag-5'>語言</b>與標準<b class='flag-5'>C</b><b class='flag-5'>語言</b>有什么<b class='flag-5'>區(qū)別</b>?

    sizeofstrlen到底有什么區(qū)別經(jīng)典C語言面試題講解

    基本定義1、sizeofC/C++中的一個運算符,其作用是返回一個對象或者類型在內(nèi)存中所占用的字節(jié)數(shù)。 注意:sizeof后面如果是類型則必須加括號,如
    的頭像 發(fā)表于 02-03 08:24 ?7254次閱讀

    C語言sizeof操作符基礎(chǔ)和經(jīng)典問題

    C語言中,sizeof是一個操作符(operator),而不是函數(shù)!其用于判斷數(shù)據(jù)類型或者表達式長度(所占的內(nèi)存字節(jié)數(shù))。其有兩種表達形式:
    的頭像 發(fā)表于 04-04 17:39 ?2704次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>sizeof</b>操作符基礎(chǔ)和經(jīng)典問題

    C語言中的char數(shù)組和char指針有什么區(qū)別?

    讓我們通過下面的例子,來了解 C語言中字符數(shù)組和字符指針之間的區(qū)別。
    的頭像 發(fā)表于 01-29 16:35 ?2745次閱讀

    嵌入式C語言中堆和棧的區(qū)別

    在嵌入式C語言中,堆和棧都是用來存儲變量的內(nèi)存區(qū)域,但它們在存儲和使用變量方面有很大的區(qū)別。
    的頭像 發(fā)表于 04-14 11:45 ?1414次閱讀

    strlensizeof的異同

    1,strlen函數(shù)作用:用于計算以空字符'\0'結(jié)尾的字符串的長度,即字符串中的字符個數(shù),不包括空字符本身。返回值:strlen返回一個size_t類型的值,表示字符串中字符
    的頭像 發(fā)表于 12-13 08:00 ?681次閱讀
    <b class='flag-5'>strlen</b>和<b class='flag-5'>sizeof</b>的異同