目錄
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.sizeof 函數與 strlen 函數區別
在C
語言中,strlen
函數和 sizeof
函數都能獲取字符串長度,但是兩者之間到底有什么區別呢,下面我們一一道來;
1.獲取字符串長度 – 針對字符串
sizeof
函數數獲取的長度是整個內存大小的長度,返回的長度包括'\0'
;strlen
函數獲取的長度以'\0'
結尾,返回的長度不包括'\0'
;
a.獲取常規字符串長度 – 使用 strlen 和 sizeof 都一樣
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 sizeof 和 strlen 函數區別
//@Time:2021/06/03 07:40
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
char p[4] = "abc";
printf("字符串:%s sizeof長度:%d\n", p, sizeof(p));
printf("字符串:%s strlen長度:%d\n", p, strlen(p));
/*
輸出:
字符串:abc sizeof長度:4
字符串:abc strlen長度:3
*/
sizeof
求的是字符串在內存中的長度,所以它是加上最后的 '\0'
的,所以一般而言 sizeof
函數的長度會比 strlen
函數的長度多 1。
b.獲取非常規字符串長度 – 使用 strlen 和 sizeof 不一樣
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 sizeof 和 strlen 函數區別
//@Time:2021/06/03 07:40
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
char str[1char str[100] = {0};
strcpy(str, "abcd");
int str_len = strlen(str);
int str_size = sizeof(str);
printf("strlen(str) = %d\n", (str_len));
printf("sizeof(str) = %d\n", (str_size));
/*
輸出:
strlen(str) = 4
sizeof(str) = 100
*/
這個例子可以充分說明:strlen 計算的是字符串到'\0'
位置的大小,sizeof
計算的字符串占的內存大小,這也是 strlen
函數和 [sizeof](https://www.codersrc.com/archives/7851.html)
不同之處;
2.獲取指針/數組長度 – 針對指針/數組
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 sizeof 和 strlen 函數區別
//@Time:2021/06/03 07:40
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
char p1[] = "abcdefg"; //數組
printf("字符串:%s sizeof長度:%d\n", p1, sizeof(p1));
printf("字符串:%s strlen長度:%d\n", p1, strlen(p1));
printf("----------------------------\n");
char* p2 = "abcdefg"; //指針
printf("字符串:%s sizeof長度:%d\n", p2, strlen(p2));
printf("字符串:%s strlen長度:%d\n", p2, sizeof(p2));
/*
輸出:
字符串:abcdefg sizeof長度:8
字符串:abcdefg strlen長度:7
----------------------------
字符串:abcdefg sizeof長度:7
字符串:abcdefg strlen長度:4
*/
值得注意的是:指針占用的內存大小始終為 4 個字節;
3.sizeof 獲取內存大小
strlen
函數只能計算字符串長度,sizeof
能獲取 int / float / bool / char 等等所有類型的內存占用大小,比如:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 sizeof 和 strlen 函數區別
//@Time:2021/06/03 07:40
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
printf("int=%d\nshort=%d\ndouble=%d\n", sizeof(int), sizeof(short), sizeof(double));
/*
輸出:
int=4
short=2
double=8
請按任意鍵繼續. . .
*/
4.經典案例
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 sizeof 和 strlen 函數區別
//@Time:2021/06/03 07:40
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include "stdafx.h"
#include<stdlib.h>
#include<stdio.h>
void main()
{
int arr[] = { 1, 2, 3 };
printf("sizeof(arr) : %d\n",sizeof(arr));
for (int i = 0; i < sizeof(arr); i++){
printf("%d,", arr[i]);
}
printf("\n");
system("pause");
}
/*
輸出結果:
sizeof(arr) : 12
1,2,3,-858993460,9697168,11737625,1,13017304,13018680,123799719,11735310,11735310,
請按任意鍵繼續. . .
*/
是不是很懵逼,,除了會輸出 1
,2
,3
以外,還會輸出雜亂無章的數字,但一共是輸出 12
個。因為數組的內存是動態分配的,到了元素 3
以后的元素都是新分配的,並不一定是空,隨機數。
因為數組是一片連續的空間,有可能元素 3
的空間是有數據的,那么 C
語言會將其讀取出來,當然是一些沒有實際意義的雜亂無章的數字,但你不要想着去操作,否則可能導致數據錯亂,所以有可能你運行好幾次,后面的值都不會有變化。正確版本如下:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 sizeof 和 strlen 函數區別
//@Time:2021/06/03 07:40
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
int arr[] = { 1, 2, 3 };
printf("sizeof(arr)/sizeof(int) : %d\n", sizeof(arr) / sizeof(int));
for (int i = 0; i < sizeof(arr) / sizeof(int); i++){
printf("%d,", arr[i]);
}
/*
輸出:
sizeof(arr)/sizeof(int) : 3
1,2,3,
請按任意鍵繼續. . .
*/
二.猜你喜歡
- 安裝 Visual Studio
- 安裝 Visual Studio 插件 Visual Assist
- Visual Studio 2008 卸載
- Visual Studio 2003/2015 卸載
- 設置 Visual Studio 字體/背景/行號
- C 語言格式控制符/占位符
- C 語言邏輯運算符
- C 語言三目運算符
- C 語言逗號表達式
- C 語言自加自減運算符(++i / i++)
- C 語言 for 循環
- C 語言 break 和 continue
- C 語言 while 循環
- C 語言 do while 和 while 循環
- C 語言 switch 語句
- C 語言 goto 語句
- C 語言 char 字符串
- C 語言 strlen 函數
- C 語言 sizeof 函數
- C 語言 sizeof 和 strlen 函數區別
未經允許不得轉載:猿說編程 » C 語言 sizeof 和 strlen 函數區別
[喜歡(3)](javascript:😉 [打賞](javascript:😉
本文由博客 - 猿說編程 猿說編程 發布!