0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中strlen和sizeof的区别

学益得智能硬件 来源:学益得智能硬件 2023-04-23 09:45 次阅读

如果你经常刷笔试题,那你一定会刷到这样的题目:

char str[] = “hello”;
printf(“%d %d
”, sizeof(str), strlen(str));


const char *str = “hello”;
printf(“%d %d
”, sizeof(str), strlen(str));


把 sizeof 和 strlen 放在一起考察,题目不难,只要你的C语言基本功扎实,做出来应该没问题。

第一个,str是个数组,数组里面的内容是字符串hello。但是需要注意的是,字符串都是以'�'结尾,所以数组实际占6个字节。

sizeof是关键字,用于求解类型的长度,sizeof加上数组名,表示数组所占的字节数,所以结果是6。

strlen是字符串处理函数,求解字符串的长度,长度不包含'�',所以结果是5。

第二个,str是指针,指向字符串常量。

sizeof加上指针,表示指针变量占的字节数,32位系统是4字节,64位系统是8字节。至于说字符串长度,跟上面一样,是5个字节。

这些都算是常见的,我们再来看下不常见的,指针都当作8字节来处理。
int a[] = {1, 2, 3}; 


printf("%ld
",sizeof(&a));
printf("%ld
",sizeof(*a));


intb[2][3]={0};
printf("%ld
",sizeof(b[0]));
printf("%ld
",sizeof(b[0]+1));
printf("%ld
",sizeof(&b[0]));


一个一维数组,&a表示数组的地址,sizeof(&a)是8字节。

*a表示数组第一个元素,sizeof(*a)是4个字节。

对于二维数组,b[0]表示首行首元素地址,类似于一维数组的数组名,sizeof(b[0])就是第一行的长度12字节。

b[0]+1表示首行第二个元素的地址,编译器当作指针来处理,sizeof(b[0] + 1)是8个字节。

&b[0]表示数组首行地址,编译器同样把它当作指针来处理,sizeof(&b[0])也是8字节。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7591

    浏览量

    135806
  • 字符串
    +关注

    关注

    1

    文章

    570

    浏览量

    20464
  • 函数
    +关注

    关注

    3

    文章

    4276

    浏览量

    62316
  • 指针
    +关注

    关注

    1

    文章

    478

    浏览量

    70489
  • 数组
    +关注

    关注

    1

    文章

    412

    浏览量

    25880

原文标题:strlen和sizeof

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中void指针的基本认识及典型应用

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*类型的。
    发表于 02-01 09:26 1045次阅读

    C语言sizeofstrlen区别

    大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言sizeofstrlen区别,希望能对你有所帮助
    发表于 07-11 11:51 1159次阅读

    C语言中for循环的用法和应用 C语言中for循环与while循环的区别

    C语言中的循环结构时,for循环是最常用的一种。它允许重复执行一段代码,直到满足特定条件为止。
    发表于 08-18 16:33 2969次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>for循环的用法和应用 <b class='flag-5'>C</b><b class='flag-5'>语言中</b>for循环与while循环的<b class='flag-5'>区别</b>

    strlensizeof区别

    1.strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。char aa[10];cout
    发表于 02-10 10:44

    【求助】C语言中sizeof使用错误

    ();printf("output\n");printf("%d",sizeof('c'));printf("%d",sizeof(string1
    发表于 11-08 11:26

    c语言中double与float的区别 相关资料分享

    c语言中double与float的区别C语言中小数的数据类型为 float 或 double:float 称为单精度浮点数,double 称
    发表于 07-01 09:10

    c语言中double与float区别是什么?

    c语言中double与float区别是什么?
    发表于 10-14 07:58

    sizeofstrlen函数的区别在哪

    野指针是指指针指向的位置是不可知的,主要成因是什么?sizeofstrlen函数的区别在哪?链表和数组的区别在哪?
    发表于 12-24 07:19

    C语言中的关键字

    C语言中的入门教程
    发表于 10-14 16:24 3次下载

    C51单片机C语言与标准C语言有什么区别

    一:C51(单片机C语言)与标准C语言区别1、 C
    发表于 10-09 08:00 134次下载
    <b class='flag-5'>C</b>51单片机<b class='flag-5'>C</b><b class='flag-5'>语言</b>与标准<b class='flag-5'>C</b><b class='flag-5'>语言</b>有什么<b class='flag-5'>区别</b>?

    sizeofstrlen到底有什么区别经典C语言面试题讲解

    基本定义1、sizeofC/C++中的一个运算符,其作用是返回一个对象或者类型在内存中所占用的字节数。 注意:sizeof后面如果是类型则必须加括号,如
    的头像 发表于 02-03 08:24 7216次阅读

    C语言sizeof操作符基础和经典问题

    C语言中sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:
    的头像 发表于 04-04 17:39 2643次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>的<b class='flag-5'>sizeof</b>操作符基础和经典问题

    C语言中的char数组和char指针有什么区别

    让我们通过下面的例子,来了解 C语言中字符数组和字符指针之间的区别
    的头像 发表于 01-29 16:35 2593次阅读

    嵌入式C语言中堆和栈的区别

    在嵌入式C语言中,堆和栈都是用来存储变量的内存区域,但它们在存储和使用变量方面有很大的区别
    的头像 发表于 04-14 11:45 1311次阅读

    strlensizeof的异同

    1,strlen函数作用:用于计算以空字符'\0'结尾的字符串的长度,即字符串中的字符个数,不包括空字符本身。返回值:strlen返回一个size_t类型的值,表示字符串中字符
    的头像 发表于 12-13 08:00 565次阅读
    <b class='flag-5'>strlen</b>和<b class='flag-5'>sizeof</b>的异同