对于 strlen 和 sizeof,相信不少程序员会混淆其功能。虽然从表面上看它们都可以求字符串的长度,但二者却存在着许多不同之处及本质区别,今天得这篇文章我们就来学习C语言strlen与sizeof区别的相关资料,需要的朋友可以参考一下
方法2:递归
size_t my_strlen3(const char* str)
{
//如果不是\0就+1(本身指向字符),然后递归下一个字符
if (*str != '\0')
return 1 + my_strlen3(str + 1);
//遇到\0即返回0
else
return 0;
}
方法3:指针-指针
指针-指针得到的是二者之间元素的个数。所以只要一个指针指向字符串首字符,一个指针指向\0,二者相减就是字符串长度
size_t my_strlen2(const char* str)
{
char* start = str;
char* end = str;
while (*end != '\0')
{
end++;
}
return end - start;
}
strlen()
返回参数size_t
造成的坑点
int main()
{
char* p1 = "abcd";
char* p2 = "abcde";
if (strlen(p1) - strlen(p2)>0)
{
printf("p1>p2");
}
else
{
printf("p1<p2");
}
return 0;
}
上述代码打印结果:p1>p2
strlen(p1)
结果为4
strlen(p2):
结果为5
二者的类型都为size_t
无符号整形
二者相减得到-1,也被认为是无符号整形,对应的值>0
三.strlen与sizeof的区别
共同点:返回类型都是size_t
不同点:sizeof()
是操作符计算的是变量/类型所占空间的大小,单位是字节,\0也算进空间
strlen()
是库函数,计算的是字符串长度,不计算\0
int main()
{
char arr1[] = { 'a','b','c' };
int ret1 = strlen(arr1);
int ret2 = sizeof(arr1);
printf("%d %d\n", ret1,ret2); //随机值 3
//arr1并没放入\0,strlen()向后直到找到\0才停止,所以是随机值 而arr1本身数组元素个数为3,根据后面初始化的内容确定了数组的大小,sizeof:3*1 = 3
char arr[] = "abcdef";
int ret3 = strlen(arr);
int ret4 = sizeof(arr);
printf("%d %d\n", ret3, ret4); //6 7
//arr大小为7,含\0 strlen不算\0
return 0;
}
到此这篇关于关于C语言strlen
与sizeof
区别详情的文章就介绍到这了,更多相关C语言strlen
与sizeof
区别内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:关于C语言strlen与sizeof区别详情


猜你喜欢
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言详解float类型在内存中的存储方式 2023-03-27
- C++ 数据结构超详细讲解顺序表 2023-03-25
- Easyx实现扫雷游戏 2023-02-06
- ubuntu下C/C++获取剩余内存 2023-09-18
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言qsort()函数的使用方法详解 2023-04-26
- Qt计时器使用方法详解 2023-05-30
- C语言手把手带你掌握带头双向循环链表 2023-04-03