strlen()和sizeof()区别
目录
区别
strlen()和sizeof()在计算时的大小
1.'\0'的情况
2.'\n'的情况
指针的特殊性
sizeof()在数组中的使用
总结
区别
- sizeof()是操作符,strlen()是库函数
- sizeof的参数可以是数据类型,也可以是变量;strlen()的参数只能是以'\0'结尾的字符串
- 编译器在编译时就计算了sizeof的结果,而strlen()必须运行时才能计算出来
- sizeof是数据类型占内存的大小;strlen()是字符串实际的长度
- 数组作为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()区别相关推荐
- strlen与sizeof区别
1. strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止. c ...
- 实例分析C语言中strlen和sizeof的区别
C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...
- char[]:strlen和sizeof的区别
C code: // char[]:strlen和sizeof的区别 #include <stdio.h> #include <string.h> int main(int a ...
- strlen、sizeof与size()求字符串长度的区别
strlen.sizeof与size()求字符串长度的区别 cout<<strlen("123")<<endl; //返回 3 cout<<si ...
- strlen 与 sizeof 的区别详解
写函数的时候,经常要对数组和字符串以及指针进行初始化. strlen 是函数,sizeof 是运算符. strlen 测量的是字符的实际长度.以'\0' 结束. 而sizeof 测量的是字符的分配大小 ...
- 【C语言】strlen和sizeof的区别
strlen和sizeof没有什么关系!!! 1.strlen是求字符串长度的,只能针对字符串求长度 ,库函数 , 使用要引用头文件string.h 2.sizeof计算变量.数组.类型的大小,它的单 ...
- strlen()和sizeof()求字符串长度
我们在编写C语言程序时,很多时候都需要求字符串的长度,这时候我们就会想到使用strlen()或者sizeof(),那么它们两者的使用有什么区别呢?在使用的时候需要注意些什么呢? sizeof()是一个 ...
- 【C 语言】字符串操作 ( strlen 与 sizeof 函数 | 计算 字符串长度 与 内存块大小 )
文章目录 一.strlen 与 sizeof 函数 二.计算 字符串长度 与 内存块大小 一.strlen 与 sizeof 函数 strlen() 函数的作用是获取字符串大小 , 其原理是 从 内存 ...
- strlen 与 sizeof
[1]strlen 与 sizeof有何区别?(1)sizeof操作符的结果类型是size_t,它在头文件中typedef为 unsigned int 类型.该类型保证能容纳实现所建立的最大对象的字节 ...
最新文章
- Unity The Type Matching Rule
- 在苏州当老师大概博士毕业,工作稳定后就准备要孩子了
- 当前最好的非深度迁移学习方法:流形空间下的分布对齐
- MySQL服务迁移到opt_mysql文件*.opt *.frm *.MYI *.MYD的迁移
- 线段树专题-等差子序列 BZOJ-2124
- Spring tx:advice/
- $@ $# $2 $0 $* Linux 参数使用
- Android:单元测试InstrumentationTestRunner
- 快闪族 - 百度百科
- K.image_data_format() == ‘channels_first‘
- Python项目--飞机作战完整版(附带图片素材)
- 关于下载的NetMeeting无法共享的解决办法
- go 语言调用 python 把.dat格式数据转换为.mat
- 肖邦 第一叙事曲 赏析
- mysql不同分数的人数,mysql如何统计每个专业分数段的人数
- 【杂篇 · 电脑】买Macbook之后的一些记录
- 阅读软件怎么添加书源_继阅读软件后又一款阅读神器,安卓专用,上千书源,无广告,无vip...
- django请求生命周期,FBV和CBV,ORM拾遗,Git
- 四川省部分地区经济发展水平的统计分析
- 清华大学计算机操作系统网易公开课笔记(持续更新)
热门文章
- 做一个简单的游戏服务器
- mysql eof_详细介绍mysql 协议的EOF包及解析
- 20230727-随笔
- Ubuntu系统装机流程(显卡驱动、cuda、cudnn、搜狗输入法、anaconda、pycharm)
- 掘金是不是对php有意见,富贵教你用PHP爬取掘金文章 | 码农网
- 再怎么链上 还不是要结合传统经济的借贷靠谱吗?
- JavaScript实现屏幕录像
- linux ubuntu联网设置方法,Ubuntu系统无线网络连接设置方法
- 服务器上打开pdb文件,VS“没法查找或打开PDB文件”是怎么回事?如何解决
- Vue2.0学习笔记二 基础语法