欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2024年08月27日 08:59:40   作者:dingdongkk  
sizeof?和?strlen?是兩個(gè)常用于 C/C++ 語(yǔ)言中的函數(shù)或操作符,本文主要介紹了C語(yǔ)言中sizeof 和 strlen的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下

sizeof 和 strlen 是兩個(gè)常用于 C/C++ 語(yǔ)言中的函數(shù)或操作符,它們?cè)诠δ芎褪褂脠?chǎng)景上有很大區(qū)別。

1. sizeof 操作符

  • 功能:sizeof 是一個(gè)編譯時(shí)操作符,用于計(jì)算數(shù)據(jù)類型或變量在內(nèi)存中占用的字節(jié)大小。它可以應(yīng)用于基本數(shù)據(jù)類型、數(shù)組、結(jié)構(gòu)體以及用戶定義的數(shù)據(jù)類型。
  • 返回值:返回類型或?qū)ο笤趦?nèi)存中占用的總字節(jié)數(shù)。
  • 作用對(duì)象:可以用于所有數(shù)據(jù)類型,包括基本類型、指針、數(shù)組、結(jié)構(gòu)體等。
  • 計(jì)算范圍:計(jì)算整個(gè)數(shù)據(jù)結(jié)構(gòu)的大小,包括字符數(shù)組的末尾空字符 '\0',還會(huì)包括填充字節(jié)(對(duì)于結(jié)構(gòu)體而言)。
  • 編譯期執(zhí)行:sizeof 在編譯期執(zhí)行,因此不需要在運(yùn)行時(shí)計(jì)算其結(jié)果。

示例:

#include <stdio.h>

int main() {
    int a = 10;
    char str[] = "Hello";
    
    printf("Size of int: %lu\n", sizeof(a));              // 返回 4(假設(shè)int為4字節(jié))
    printf("Size of char array: %lu\n", sizeof(str));     // 返回 6(包括'\0')
    
    return 0;
}

輸出:

Size of int: 4
Size of char array: 6

  • sizeof(a) 計(jì)算 int 類型變量 a 所占的內(nèi)存,返回 4(假設(shè) int 類型在該系統(tǒng)中為 4 字節(jié))。
  • sizeof(str) 返回 char 數(shù)組 str 的總大小,包括字符串末尾的 \0(即 6 字節(jié):Hello\0)。

2. strlen 函數(shù)

  • 功能:strlen 是用于計(jì)算字符串長(zhǎng)度的標(biāo)準(zhǔn)庫(kù)函數(shù),它計(jì)算的是以 '\0' 結(jié)尾的字符串中字符的數(shù)量。
  • 返回值:返回字符串中的字符數(shù)(不包括末尾的空字符 '\0')。
  • 作用對(duì)象:只能用于以 '\0' 結(jié)尾的 C 字符串,不能用于其他類型(如整數(shù)、結(jié)構(gòu)體、數(shù)組)。
  • 運(yùn)行時(shí)執(zhí)行:strlen 需要在運(yùn)行時(shí)遍歷字符串來(lái)計(jì)算其長(zhǎng)度,因此是運(yùn)行時(shí)計(jì)算的。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello";
    
    printf("Length of string: %lu\n", strlen(str));      // 返回 5
    
    return 0;
}

輸出:

Length of string: 5

strlen(str) 返回字符串 "Hello" 的長(zhǎng)度,不包括終止符 '\0',因此返回 5。

3. sizeof 與 strlen 的主要區(qū)別

特性sizeofstrlen
功能計(jì)算數(shù)據(jù)類型或變量占用的總字節(jié)數(shù)計(jì)算字符串中字符的長(zhǎng)度,不包含 '\0'
作用對(duì)象可以作用于任何數(shù)據(jù)類型僅限于以 '\0' 結(jié)尾的字符串
是否包含 \0包含字符串的 '\0'(對(duì) char[] 而言)不包含 '\0'
計(jì)算時(shí)機(jī)編譯時(shí)計(jì)算運(yùn)行時(shí)計(jì)算
返回值返回占用內(nèi)存的總字節(jié)數(shù)返回字符串中的字符數(shù),不包括末尾的 \0
適用范圍基本類型、數(shù)組、結(jié)構(gòu)體、指針等僅適用于 C 風(fēng)格的字符串

4. 對(duì)字符串的對(duì)比示例

假設(shè)我們有如下代碼:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello";
    
    printf("sizeof(str): %lu\n", sizeof(str));     // 6 (包含 '\0')
    printf("strlen(str): %lu\n", strlen(str));     // 5 (不包含 '\0')
    
    return 0;
}

輸出:

sizeof(str): 6
strlen(str): 5

  • sizeof(str) 返回 6,因?yàn)?nbsp;str 是一個(gè)包含 \0 的字符數(shù)組。
  • strlen(str) 返回 5,因?yàn)樗挥?jì)算字符串 "Hello" 中的字符數(shù),不包括末尾的空字符 \0

5. 指針與數(shù)組的差異

當(dāng)我們使用指針時(shí),sizeof 的行為會(huì)有所不同。例如:

#include <stdio.h>
#include <string.h>

int main() {
    char *str = "Hello";
    
    printf("sizeof(str): %lu\n", sizeof(str));    // 8 (假設(shè)指針是 8 字節(jié))
    printf("strlen(str): %lu\n", strlen(str));    // 5 (計(jì)算指向的字符串長(zhǎng)度)
    
    return 0;
}

輸出:

sizeof(str): 8
strlen(str): 5

  • sizeof(str) 返回 8,因?yàn)?nbsp;str 是一個(gè)指針,指針的大小在 64 位系統(tǒng)上通常是 8 字節(jié)。
  • strlen(str) 返回 5,因?yàn)樗?jì)算的是指針指向的字符串 "Hello" 的長(zhǎng)度。

總結(jié)

  • sizeof 用于計(jì)算數(shù)據(jù)類型或變量的總內(nèi)存大小,適用于任何類型(包括數(shù)組、指針等)。
  • strlen 專門用于計(jì)算以 '\0' 結(jié)尾的 C 字符串的長(zhǎng)度,只計(jì)算字符數(shù),不包括 '\0'。

到此這篇關(guān)于C語(yǔ)言中sizeof 和 strlen的區(qū)別的文章就介紹到這了,更多相關(guān)C語(yǔ)言 sizeof 和 strlen內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Qt之簡(jiǎn)單的異步操作實(shí)現(xiàn)方法

    Qt之簡(jiǎn)單的異步操作實(shí)現(xiàn)方法

    這篇文章主要介紹了Qt之簡(jiǎn)單的異步操作實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言中文件處理全攻略詳解

    C語(yǔ)言中文件處理全攻略詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中文件處理的相關(guān)知識(shí),包括創(chuàng)建、寫入、追加操作解析,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-01-01
  • C語(yǔ)言調(diào)用Python代碼的方法

    C語(yǔ)言調(diào)用Python代碼的方法

    這篇文章主要介紹了C語(yǔ)言調(diào)用Python代碼的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++多重繼承與虛繼承分析

    C++多重繼承與虛繼承分析

    這篇文章主要介紹了C++多重繼承與虛繼承分析,是面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的知識(shí)點(diǎn),需要的朋友可以參考下
    2014-08-08
  • 簡(jiǎn)單比較C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)

    簡(jiǎn)單比較C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)的簡(jiǎn)單比較,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C++ 將一個(gè)文件讀入數(shù)組再讀出數(shù)組的方法

    C++ 將一個(gè)文件讀入數(shù)組再讀出數(shù)組的方法

    今天小編就為大家分享一篇C++ 將一個(gè)文件讀入數(shù)組再讀出數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語(yǔ)言:代碼宏詳解

    C語(yǔ)言:代碼宏詳解

    這篇文章主要介紹了 C語(yǔ)言宏定義使用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • C++使用string的大數(shù)加法運(yùn)算(1)

    C++使用string的大數(shù)加法運(yùn)算(1)

    這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)加法運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C++11中移動(dòng)構(gòu)造函數(shù)案例代碼

    C++11中移動(dòng)構(gòu)造函數(shù)案例代碼

    C++11 標(biāo)準(zhǔn)中為了滿足用戶使用左值初始化同類對(duì)象時(shí)也通過(guò)移動(dòng)構(gòu)造函數(shù)完成的需求,新引入了 std::move() 函數(shù),它可以將左值強(qiáng)制轉(zhuǎn)換成對(duì)應(yīng)的右值,由此便可以使用移動(dòng)構(gòu)造函數(shù),對(duì)C++11移動(dòng)構(gòu)造函數(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2023-01-01

最新評(píng)論