亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

sizeof 和 strlen 是兩個常用于 C/C++ 語言中的函數(shù)或操作符,它們在功能和使用場景上有很大區(qū)別。

1. sizeof 操作符

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

示例:

#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" 的長度,不包括終止符 '\0',因此返回 5。

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

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

4. 對字符串的對比示例

假設(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,因為 str 是一個包含 \0 的字符數(shù)組。
  • strlen(str) 返回 5,因為它只計算字符串 "Hello" 中的字符數(shù),不包括末尾的空字符 \0。

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

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

#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 (計算指向的字符串長度)
    
    return 0;
}

輸出:

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

  • sizeof(str) 返回 8,因為 str 是一個指針,指針的大小在 64 位系統(tǒng)上通常是 8 字節(jié)。
  • strlen(str) 返回 5,因為它計算的是指針指向的字符串 "Hello" 的長度。

總結(jié)

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

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

相關(guān)文章

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

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

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

    C語言中文件處理全攻略詳解

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

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

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

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

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

    簡單比較C語言中的execl()函數(shù)與execlp()函數(shù)

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

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

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

    C語言實現(xiàn)簡單五子棋游戲

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

    C語言:代碼宏詳解

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

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

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

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

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

最新評論