目录

区别

strlen()和sizeof()在计算时的大小

1.'\0'的情况

2.'\n'的情况

指针的特殊性

sizeof()在数组中的使用

总结


区别

  1. sizeof()是操作符,strlen()是库函数
  2. sizeof的参数可以是数据类型,也可以是变量;strlen()的参数只能是以'\0'结尾的字符串
  3. 编译器在编译时就计算了sizeof的结果,而strlen()必须运行时才能计算出来
  4. sizeof是数据类型占内存的大小;strlen()是字符串实际的长度
  5. 数组作为sizeof的参数时,不退化,作为strlen的参数时要退化为指针

strlen()和sizeof()在计算时的大小

1.'\0'的情况

strlen()计算时,会到'\0'的位置停下来不再计算,不会把'\0'计算入内。但是如果'\0'后面有数字时,这个时候'\0'已经不是'\0'而是一个八进制的数,strlen()遇到后不会当作'\0'来处理。

        sizeof()遇到'\0'不会停下,sizeof会把字符串结尾处的'\0'读取到,计算在长度内。

结合例题理解

int main()
{char str[] = "abc\012abcdef";char str1[] = "abcdefg";char str2[] = "abc\0abc";cout << sizeof(str) << endl;cout << strlen(str) << endl;cout << sizeof(str1) << endl;cout << strlen(str1) << endl;cout << sizeof(str2) << endl;cout << strlen(str2) << endl;
}

解答:

 \0 +数字 = 八进制  因此,/012=8+2=10

注意,八进制输出就是1位,不是说八进制的10输出位数位数就是两位

2.'\n'的情况

  • strlen()不会读取'\n'
  • sizeof()会读取‘\n’

字符串以‘\n’结尾就不会再以‘\0’结尾了

strlen()为下图所示,sizeof()还需要加上结束符'\0',即为9

有个误区是,会以为以‘\n’结尾就就不再往后读取了,但是\n并不会作为字符串的结束符,字符串结束符只能是\0 

指针的特殊性

sizeof(指针)大小是固定的,并不跟指针指向的内存空间相关

指针在X64 64位平台上,大小为8,X86 32位平台上大小为4

用指针对字符串输出时:

printf("%s",src);//%s可以直接输出字符串,遇到\0停止,不需要循环

补充:如果malloc开辟空间

需要malloc(srlen(src)+1);加1为’\0‘分配空间

sizeof()在数组中的使用

原文链接:sizeof()在数组中的使用

总结

  • strlen()不会读取'\0'
  • sizeof()会读取‘\0’
  •  \0 +数字 = 八进制,占1位
  • strlen()会读取'\n'
  • sizeof()会读取‘\n’
  • sizeof(指针)
    • X86 32位 =4
    • X64 64位=8
  • 如果malloc开辟空间,需要malloc(srlen(src)+1);加1为’\0‘分配空间

  • 用指针对字符串输出时,printf("%s",src);//%s可以直接输出字符串,遇到\0停止,不需要循环

  • 一维数组arr[]:

    • sizeof(arr) ->数组总字节

    • sizeof(arr[0]) ->第一个元素字节数,或者说是单个元素的大小

  • 二维数组brr[][]

    • sizeof(brr) ->数组总字节数,即行和列元素总个数*定义类型的大小

    • sizeof(brr[0]) ->第一行元素的总字节数

    • sizeof(brr[0][0]) ->单元格类型所占字节数与一维数组arr[0]含义一致,单个元素的大小。

strlen()和sizeof()区别相关推荐

  1. strlen与sizeof区别

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

  2. 实例分析C语言中strlen和sizeof的区别

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  3. char[]:strlen和sizeof的区别

    C code: // char[]:strlen和sizeof的区别 #include <stdio.h> #include <string.h> int main(int a ...

  4. strlen、sizeof与size()求字符串长度的区别

    strlen.sizeof与size()求字符串长度的区别 cout<<strlen("123")<<endl; //返回 3 cout<<si ...

  5. strlen 与 sizeof 的区别详解

    写函数的时候,经常要对数组和字符串以及指针进行初始化. strlen 是函数,sizeof 是运算符. strlen 测量的是字符的实际长度.以'\0' 结束. 而sizeof 测量的是字符的分配大小 ...

  6. 【C语言】strlen和sizeof的区别

    strlen和sizeof没有什么关系!!! 1.strlen是求字符串长度的,只能针对字符串求长度 ,库函数 , 使用要引用头文件string.h 2.sizeof计算变量.数组.类型的大小,它的单 ...

  7. strlen()和sizeof()求字符串长度

    我们在编写C语言程序时,很多时候都需要求字符串的长度,这时候我们就会想到使用strlen()或者sizeof(),那么它们两者的使用有什么区别呢?在使用的时候需要注意些什么呢? sizeof()是一个 ...

  8. 【C 语言】字符串操作 ( strlen 与 sizeof 函数 | 计算 字符串长度 与 内存块大小 )

    文章目录 一.strlen 与 sizeof 函数 二.计算 字符串长度 与 内存块大小 一.strlen 与 sizeof 函数 strlen() 函数的作用是获取字符串大小 , 其原理是 从 内存 ...

  9. strlen 与 sizeof

    [1]strlen 与 sizeof有何区别?(1)sizeof操作符的结果类型是size_t,它在头文件中typedef为 unsigned int 类型.该类型保证能容纳实现所建立的最大对象的字节 ...

最新文章

  1. Unity The Type Matching Rule
  2. 在苏州当老师大概博士毕业,工作稳定后就准备要孩子了
  3. 当前最好的非深度迁移学习方法:流形空间下的分布对齐
  4. MySQL服务迁移到opt_mysql文件*.opt *.frm *.MYI *.MYD的迁移
  5. 线段树专题-等差子序列 BZOJ-2124
  6. Spring tx:advice/
  7. $@ $# $2 $0 $* Linux 参数使用
  8. Android:单元测试InstrumentationTestRunner
  9. 快闪族 - 百度百科
  10. K.image_data_format() == ‘channels_first‘
  11. Python项目--飞机作战完整版(附带图片素材)
  12. 关于下载的NetMeeting无法共享的解决办法
  13. go 语言调用 python 把.dat格式数据转换为.mat
  14. 肖邦 第一叙事曲 赏析
  15. mysql不同分数的人数,mysql如何统计每个专业分数段的人数
  16. 【杂篇 · 电脑】买Macbook之后的一些记录
  17. 阅读软件怎么添加书源_继阅读软件后又一款阅读神器,安卓专用,上千书源,无广告,无vip...
  18. django请求生命周期,FBV和CBV,ORM拾遗,Git
  19. 四川省部分地区经济发展水平的统计分析
  20. 清华大学计算机操作系统网易公开课笔记(持续更新)

热门文章

  1. 做一个简单的游戏服务器
  2. mysql eof_详细介绍mysql 协议的EOF包及解析
  3. 20230727-随笔
  4. Ubuntu系统装机流程(显卡驱动、cuda、cudnn、搜狗输入法、anaconda、pycharm)
  5. 掘金是不是对php有意见,富贵教你用PHP爬取掘金文章 | 码农网
  6. 再怎么链上 还不是要结合传统经济的借贷靠谱吗?
  7. JavaScript实现屏幕录像
  8. linux ubuntu联网设置方法,Ubuntu系统无线网络连接设置方法
  9. 服务器上打开pdb文件,VS“没法查找或打开PDB文件”是怎么回事?如何解决
  10. Vue2.0学习笔记二 基础语法