C语言 sizeof 和 strlen 函数区别

零基础 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 不同之处;


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) 打赏

评论抢沙发

评论前必须登录!

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏