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ū)別
特性 | sizeof | strlen |
---|---|---|
功能 | 計算數(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)文章希望大家以后多多支持腳本之家!
- 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語言中的execl()函數(shù)與execlp()函數(shù)
這篇文章主要介紹了C語言中的execl()函數(shù)與execlp()函數(shù)的簡單比較,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08C++ 將一個文件讀入數(shù)組再讀出數(shù)組的方法
今天小編就為大家分享一篇C++ 將一個文件讀入數(shù)組再讀出數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07