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

    文章

    7534

    浏览量

    129097
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20155
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61358
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70364
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25597

原文标题:strlen和sizeof

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

收藏 人收藏

    评论

    相关推荐

    C语言sizeofstrlen区别

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

    Labview和C语言中Whlile循环的区别

    本帖最后由 高顺周 于 2012-6-2 16:23 编辑 在C语言中先是执行判断 然后运行在Labview似乎是先运行最后判断比如while(i
    发表于 06-02 14:18

    strlensizeof区别

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

    几个c语言中的问题(持续更新中)

    sizeofstrlen:sizeof 是运算符,strlen是函数。strlen的结果是在运行的时候才计算出,用来计算字符串的长度,而
    发表于 05-08 11:13

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

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

    c语言-数组

    ','e','\0'};等价。strlen(str) = 5,不包括结尾的'\0'。由以上两个我们来看看strlensizeof区别:(1)、s
    发表于 04-07 09:16

    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

    请问C语言中两种引用头文件方式的区别是什么?

    请问C语言中两种引用头文件方式的区别是什么?
    发表于 10-15 07:36

    嵌入式C语言C语言区别

    嵌入式C语言C语言区别:最常用的系统编程语言C
    发表于 10-27 06:52

    sizeofstrlen函数的区别在哪

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

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

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

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

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

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

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

    strlensizeof的异同

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