栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

sizeof和strlen的使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sizeof和strlen的使用

使用前景:

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

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

#include 
#include 
int main()
{
  char str[] = "hello world";
  char str1[100] = "hello world";

  printf("sizeof(str): %dn",sizeof(str));
  printf("sizeof(str1): %dn",sizeof(str1));

  printf("strlen(str): %dn",strlen(str));
  printf("strlen(str1): %dn",strlen(str1));
  
  return 0;
}

程序的运行结果如图:

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

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


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

#include 
#include 

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

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

其打印结果如下:

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


下次再见

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号