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,
请按任意键继续. . .
*/
是不是很懵逼,,除了会输出 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:😉
本文由博客 - 猿说编程 猿说编程 发布!