C語言中sizeof 和 strlen的區(qū)別
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ū)別
| 特性 | sizeof | strlen |
|---|---|---|
| 功能 | 計(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)文章希望大家以后多多支持腳本之家!
- C語言sizeof和strlen區(qū)別小結(jié)
- C語言中sizeof和strlen的區(qū)別詳解
- C語言中的strlen()和sizeof()對比分析
- C語言之sizeof與strlen的使用及區(qū)別
- 淺談C語言中的sizeof()和strlen()的區(qū)別
- 關(guān)于C語言strlen與sizeof區(qū)別詳情
- C語言入門篇--sizeof與strlen基礎(chǔ)理論
- C語言中sizeof()與strlen()的區(qū)別詳解
- C語言中sizeof()與strlen()函數(shù)的使用入門及對比
- C語言中關(guān)于sizeof 和 strlen的區(qū)別分析
相關(guān)文章
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ū)別的,不知你是否清楚的了解它們到底有什么樣的區(qū)別呢?下面小編就用示例來告訴大家吧,需要的朋友可以過來參考下2013-07-07
c語言程序設(shè)計(jì)文件操作方法示例(CreateFile和fopen)
c主要的文件操作函數(shù)有:CreateFile,CloseHandle,ReadFile,WriteFile,SetFilePointer,GetFileSize。其中的讀寫操作是以字符為單位,獲得文件大小也是以字符為單位。2013-12-12
C語言中g(shù)etchar和putchar的使用方法詳解
我們知道scanf函數(shù)可以從鍵盤輸入信息,而printf則可以輸出信息,同樣地,getchar和putchar也有同樣的功能,下面我來給大家介紹putchar和getchar的使用方法,需要的朋友可以參考下2023-08-08
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ì)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07

