C語言 sizeof 和 strlen 函數區別 - C語言零基礎入門教程


目錄

零基礎 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,
請按任意鍵繼續. . .
*/

是不是很懵逼,,除了會輸出 123 以外,還會輸出雜亂無章的數字,但一共是輸出 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,
請按任意鍵繼續. . .
*/

二.猜你喜歡

  1. 安裝 Visual Studio
  2. 安裝 Visual Studio 插件 Visual Assist
  3. Visual Studio 2008 卸載
  4. Visual Studio 2003/2015 卸載
  5. 設置 Visual Studio 字體/背景/行號
  6. C 語言格式控制符/占位符
  7. C 語言邏輯運算符
  8. C 語言三目運算符
  9. C 語言逗號表達式
  10. C 語言自加自減運算符(++i / i++)
  11. C 語言 for 循環
  12. C 語言 break 和 continue
  13. C 語言 while 循環
  14. C 語言 do while 和 while 循環
  15. C 語言 switch 語句
  16. C 語言 goto 語句
  17. C 語言 char 字符串
  18. C 語言 strlen 函數
  19. C 語言 sizeof 函數
  20. C 語言 sizeof 和 strlen 函數區別

未經允許不得轉載:猿說編程 » C 語言 sizeof 和 strlen 函數區別

[喜歡(3)](javascript:😉 [打賞](javascript:😉

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM