最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

sizeof 和 strlen 是兩個(gè)常用于 C/C++ 語言中的函數(shù)或操作符,它們在功能和使用場景上有很大區(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ù)。
  • 作用對象:可以用于所有數(shù)據(jù)類型,包括基本類型、指針、數(shù)組、結(jié)構(gòu)體等。
  • 計(jì)算范圍:計(jì)算整個(gè)數(shù)據(jù)結(jié)構(gòu)的大小,包括字符數(shù)組的末尾空字符 '\0',還會包括填充字節(jié)(對于結(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ì)算字符串長度的標(biāo)準(zhǔn)庫函數(shù),它計(jì)算的是以 '\0' 結(jié)尾的字符串中字符的數(shù)量。
  • 返回值:返回字符串中的字符數(shù)(不包括末尾的空字符 '\0')。
  • 作用對象:只能用于以 '\0' 結(jié)尾的 C 字符串,不能用于其他類型(如整數(shù)、結(jié)構(gòu)體、數(shù)組)。
  • 運(yùn)行時(shí)執(zhí)行:strlen 需要在運(yùn)行時(shí)遍歷字符串來計(jì)算其長度,因此是運(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" 的長度,不包括終止符 '\0',因此返回 5。

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

特性sizeofstrlen
功能計(jì)算數(shù)據(jù)類型或變量占用的總字節(jié)數(shù)計(jì)算字符串中字符的長度,不包含 '\0'
作用對象可以作用于任何數(shù)據(jù)類型僅限于以 '\0' 結(jié)尾的字符串
是否包含 \0包含字符串的 '\0'(對 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. 對字符串的對比示例

假設(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 的行為會有所不同。例如:

#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ì)算指向的字符串長度)
    
    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" 的長度。

總結(jié)

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

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

相關(guān)文章

  • C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式

    C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式

    這篇文章主要介紹了C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++用new創(chuàng)建對象和不用new創(chuàng)建對象的區(qū)別解析

    C++用new創(chuàng)建對象和不用new創(chuàng)建對象的區(qū)別解析

    在C++用new創(chuàng)建對象和不用new創(chuàng)建對象是有區(qū)別的,不知你是否清楚的了解它們到底有什么樣的區(qū)別呢?下面小編就用示例來告訴大家吧,需要的朋友可以過來參考下
    2013-07-07
  • c語言程序設(shè)計(jì)文件操作方法示例(CreateFile和fopen)

    c語言程序設(shè)計(jì)文件操作方法示例(CreateFile和fopen)

    c主要的文件操作函數(shù)有:CreateFile,CloseHandle,ReadFile,WriteFile,SetFilePointer,GetFileSize。其中的讀寫操作是以字符為單位,獲得文件大小也是以字符為單位。
    2013-12-12
  • C語言中g(shù)etchar和putchar的使用方法詳解

    C語言中g(shù)etchar和putchar的使用方法詳解

    我們知道scanf函數(shù)可以從鍵盤輸入信息,而printf則可以輸出信息,同樣地,getchar和putchar也有同樣的功能,下面我來給大家介紹putchar和getchar的使用方法,需要的朋友可以參考下
    2023-08-08
  • 教你5分鐘輕松搞定內(nèi)存字節(jié)對齊

    教你5分鐘輕松搞定內(nèi)存字節(jié)對齊

    隨便google一下,人家就可以跟你解釋的,一大堆的道理,我們沒怎么多時(shí)間,討論為何要對齊.直入主題,怎么判斷內(nèi)存對齊規(guī)則,sizeof的結(jié)果怎么來的,請牢記以下3條原則
    2013-09-09
  • C語言實(shí)現(xiàn)酒店管理系統(tǒng)

    C語言實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • ubuntu修改gcc版本的操作方法

    ubuntu修改gcc版本的操作方法

    今天小編就為大家分享一篇ubuntu修改gcc版本的操作方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++ 實(shí)現(xiàn)PE文件特征碼識別的步驟

    C++ 實(shí)現(xiàn)PE文件特征碼識別的步驟

    PE文件就是我們常說的EXE可執(zhí)行文件,針對文件特征的識別可以清晰的知道該程序是使用何種編程語言實(shí)現(xiàn)的,前提是要有特征庫,PE特征識別有多種形式,第一種是靜態(tài)識別,第二種則是動態(tài)識別,我們經(jīng)常使用的PEID查殼工具是基于靜態(tài)檢測的方法。
    2021-06-06
  • C語言實(shí)現(xiàn)靜態(tài)順序表的實(shí)例詳解

    C語言實(shí)現(xiàn)靜態(tài)順序表的實(shí)例詳解

    這篇文章主要介紹了C語言實(shí)現(xiàn)靜態(tài)順序表的實(shí)例詳解的相關(guān)資料,這里提供是幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • C語言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論

大名县| 石首市| 东阿县| 若羌县| 贺兰县| 阿克苏市| 邢台县| 津南区| 丰宁| 广平县| 安新县| 沽源县| 玉龙| 延安市| 阳朔县| 黑河市| 桃园县| 称多县| 常宁市| 磐石市| 林周县| 高唐县| 托里县| 梓潼县| 安吉县| 永靖县| 呈贡县| 渑池县| 庆城县| 固镇县| 剑川县| 正镶白旗| 沾益县| 铁岭县| 呼图壁县| 江津市| 达拉特旗| 罗山县| 福海县| 古交市| 桦南县|