零基础 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*//******************************************************************************************/ //@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 *//******************************************************************************************/ //@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:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!/******************************************************************************************/<code>char str[1</code>char 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) = 4sizeof(str) = 100*//******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 sizeof 和 strlen 函数区别 //@Time:2021/06/03 07:40 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ <code>char str[1</code>char 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 *//******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 sizeof 和 strlen 函数区别 //@Time:2021/06/03 07:40 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/
char str[1char str[1char str[1
char 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 strlen长度:%d\n", p2, strlen(p2));printf("字符串:%s sizeof长度:%d\n", p2, sizeof(p2));/*输出:字符串:abcdefg sizeof长度:8字符串:abcdefg strlen长度:7----------------------------字符串:abcdefg strlen长度:7字符串:abcdefg sizeof长度:4*//******************************************************************************************/ //@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 strlen长度:%d\n", p2, strlen(p2)); printf("字符串:%s sizeof长度:%d\n", p2, sizeof(p2)); /* 输出: 字符串:abcdefg sizeof长度:8 字符串:abcdefg strlen长度:7 ---------------------------- 字符串:abcdefg strlen长度:7 字符串:abcdefg sizeof长度:4 *//******************************************************************************************/ //@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 strlen长度:%d\n", p2, strlen(p2)); printf("字符串:%s sizeof长度:%d\n", p2, sizeof(p2)); /* 输出: 字符串:abcdefg sizeof长度:8 字符串:abcdefg strlen长度:7 ---------------------------- 字符串:abcdefg strlen长度:7 字符串:abcdefg sizeof长度: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=4short=2double=8请按任意键继续. . .*//******************************************************************************************/ //@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 请按任意键继续. . . *//******************************************************************************************/ //@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) : 121,2,3,-858993460,9697168,11737625,1,13017304,13018680,123799719,11735310,11735310,请按任意键继续. . .*//******************************************************************************************/ //@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, 请按任意键继续. . . *//******************************************************************************************/ //@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) : 31,2,3,请按任意键继续. . .*//******************************************************************************************/ //@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, 请按任意键继续. . . *//******************************************************************************************/ //@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 函数区别
ChatGPT 3.5 国内中文镜像站免费使用啦
暂无评论内容