sizeof和strlen的使用

使用前景:

最近在写代码的时候,对sizeof和strlen的使用感有些模糊,在看了一些讲解之后决定写一篇笔记

首先我们都知道,字符串是以’\0’结束的,char str1[] = “hi”,其实是等价于char str1[] = {‘h’,‘i’,‘\0’}。
先来看一个简单的例子:

#include <stdio.h>
#include <string.h>
int main()
{
  char str[] = "hello world";
  char str1[100] = "hello world";

  printf("sizeof(str): %d\n",sizeof(str));
  printf("sizeof(str1): %d\n",sizeof(str1));

  printf("strlen(str): %d\n",strlen(str));
  printf("strlen(str1): %d\n",strlen(str1));
  
  return 0;
}

程序的运行结果如图:
在这里插入图片描述
在未定义数组大小时:从运行结果可以得出一些结论,首先在对于同一个字符串sizeof和strlen计算做处理的时候sizeof的值要比strlen的值要多1,这是因为sizeof会把字符’\0’算进去,而strlen计算的是字符串实际的长度,是不包括’\0’的。

在定义了数组大小时:sizeof的结果就是数组的大小,而strlen()的结果就是字符串的实际大小。


还有一个算是有一点偏题的就是:当数组作为形参时,sizeof的结果是什么,现在通过一个例子来看

#include <stdio.h>
#include <string.h>

void getfunc(char *str)
{
  printf("sizeof(str):%d\n\n",sizeof(str));
}

int main()
{
  char    str[] = {};
  getfunc(str);
  return 0;
}

其打印结果如下:
在这里插入图片描述
包括我把数组的类型改成int或者是double,得出来的都是同样的结果,这是因为在主函数中定义的是数组,而在传参的时候,传递的是数组的数组名,而数组名就是该数组的首地址,所以传递的其实是地址,而sizeof(地址)的结果只跟操作系统的位数有关,比如我是64位的操作系统,我打印的sizeof(地址)就是8(一个字节八位)。


下次再见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值