C語言中sizeof 和 strlen的區(qū)別
sizeof 和 strlen 是兩個常用于 C/C++ 語言中的函數(shù)或操作符,它們在功能和使用場景上有很大區(qū)別。
1. sizeof 操作符
- 功能:
sizeof是一個編譯時操作符,用于計算數(shù)據(jù)類型或變量在內(nèi)存中占用的字節(jié)大小。它可以應用于基本數(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(假設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(假設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 風格的字符串 |
4. 對字符串的對比示例
假設我們有如下代碼:
#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ù)組的差異
當我們使用指針時,sizeof 的行為會有所不同。例如:
#include <stdio.h>
#include <string.h>
int main() {
char *str = "Hello";
printf("sizeof(str): %lu\n", sizeof(str)); // 8 (假設指針是 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'。
到此這篇關于C語言中sizeof 和 strlen的區(qū)別的文章就介紹到這了,更多相關C語言 sizeof 和 strlen內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
簡單比較C語言中的execl()函數(shù)與execlp()函數(shù)
這篇文章主要介紹了C語言中的execl()函數(shù)與execlp()函數(shù)的簡單比較,是C語言入門學習中的基礎知識,需要的朋友可以參考下2015-08-08
C++ 將一個文件讀入數(shù)組再讀出數(shù)組的方法
今天小編就為大家分享一篇C++ 將一個文件讀入數(shù)組再讀出數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07

