C語言中sizeof 和 strlen的區(qū)別
sizeof 和 strlen 是兩個常用于 C/C++ 語言中的函數或操作符,它們在功能和使用場景上有很大區(qū)別。
1. sizeof 操作符
- 功能:
sizeof是一個編譯時操作符,用于計算數據類型或變量在內存中占用的字節(jié)大小。它可以應用于基本數據類型、數組、結構體以及用戶定義的數據類型。 - 返回值:返回類型或對象在內存中占用的總字節(jié)數。
- 作用對象:可以用于所有數據類型,包括基本類型、指針、數組、結構體等。
- 計算范圍:計算整個數據結構的大小,包括字符數組的末尾空字符
'\0',還會包括填充字節(jié)(對于結構體而言)。 - 編譯期執(zhí)行:
sizeof在編譯期執(zhí)行,因此不需要在運行時計算其結果。
示例:
#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所占的內存,返回 4(假設int類型在該系統(tǒng)中為 4 字節(jié))。sizeof(str)返回char數組str的總大小,包括字符串末尾的\0(即 6 字節(jié):Hello\0)。
2. strlen 函數
- 功能:
strlen是用于計算字符串長度的標準庫函數,它計算的是以'\0'結尾的字符串中字符的數量。 - 返回值:返回字符串中的字符數(不包括末尾的空字符
'\0')。 - 作用對象:只能用于以
'\0'結尾的 C 字符串,不能用于其他類型(如整數、結構體、數組)。 - 運行時執(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 |
|---|---|---|
| 功能 | 計算數據類型或變量占用的總字節(jié)數 | 計算字符串中字符的長度,不包含 '\0' |
| 作用對象 | 可以作用于任何數據類型 | 僅限于以 '\0' 結尾的字符串 |
是否包含 \0 | 包含字符串的 '\0'(對 char[] 而言) | 不包含 '\0' |
| 計算時機 | 編譯時計算 | 運行時計算 |
| 返回值 | 返回占用內存的總字節(jié)數 | 返回字符串中的字符數,不包括末尾的 \0 |
| 適用范圍 | 基本類型、數組、結構體、指針等 | 僅適用于 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的字符數組。strlen(str)返回 5,因為它只計算字符串"Hello"中的字符數,不包括末尾的空字符\0。
5. 指針與數組的差異
當我們使用指針時,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"的長度。
總結
sizeof用于計算數據類型或變量的總內存大小,適用于任何類型(包括數組、指針等)。strlen專門用于計算以'\0'結尾的 C 字符串的長度,只計算字符數,不包括'\0'。
到此這篇關于C語言中sizeof 和 strlen的區(qū)別的文章就介紹到這了,更多相關C語言 sizeof 和 strlen內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++用new創(chuàng)建對象和不用new創(chuàng)建對象的區(qū)別解析
在C++用new創(chuàng)建對象和不用new創(chuàng)建對象是有區(qū)別的,不知你是否清楚的了解它們到底有什么樣的區(qū)別呢?下面小編就用示例來告訴大家吧,需要的朋友可以過來參考下2013-07-07
c語言程序設計文件操作方法示例(CreateFile和fopen)
c主要的文件操作函數有:CreateFile,CloseHandle,ReadFile,WriteFile,SetFilePointer,GetFileSize。其中的讀寫操作是以字符為單位,獲得文件大小也是以字符為單位。2013-12-12

