关于sizeof、strlen的理解与辨析以及strlen的模拟实现
关于sizeof、strlen的理解与辨析以及strlen的模拟实现
1. sizeof()
sizeof的作用: 计算变量所占内存内存空间大小,单位是字节。
注意事项:
① 首先要明确的一点是:sizeof不是函数,而是操作符。
② 如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。
③ sizeof 只关注占用内存空间的大小,不在乎内存中存放什么数据。
④ 操作数是变量时,括号可以省略。(这也变相证明了sizeof不是函数)
⑤ 操作数是表达式时,表达式不计算。
关于表达式不计算的问题,有必要作一定说明。
sizeof 在代码进行编译时,就已根据表达式的类型确定了值的大小,而表达式的执行却要在程序运行期间才能执行,在编译期间已经将sizeof处理掉了,所以在运行期间表达式不会再执行。
2. strlen
其函数原型:size_t strlen ( const char * str ) ;
注意事项
① 统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数(并不包括\0)
② strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找
//如下代码就会发生越界查找(因为arr1之前与之后空间是未知的)
#include <stdio.h>
int main()
{
char arr1[3] = {'a', 'b', 'c'}; printf("%d\n", strlen(arr1)); return 0;
}
③strlen是库函数,使用需要包含头文件# include< string.h>
④strlen的返回类型是无符号整型。
⑤strlen的参数类型是char *的指针,即是一个地址。
2.1关于strlen的模拟实现(主函数不再赘述)
//计数器⽅式
int my_strlen(const char * str)
{
int count = 0;
assert(str);
while(*str)
{
count++;
str++;
}
return count;
}
//递归方式
int my_strlen(const char * str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
//指针-指针的⽅式
int my_strlen(char *s)
{
assert(str);
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
3.关于sizeof与strlen的区别
| sizeof | strlen |
|---|---|
| 1. sizeof是操作符 | 1. strlen是库函数,使⽤需要包含头⽂件 string.h |
| 2. sizeof计算操作数所占内存的大小, 单位是字节。 | 2. srtlen是求字符串长度的,统计的是 \0 之前字符的个数。 |
关于sizeof、strlen的理解与辨析以及strlen的模拟实现的更多相关文章
- strlen、strcmp、strcat、strlen、memmove
#include <cassert> #include <iostream> using namespace std; /* strlen 返回字符串不包含结束符\0的长度 * ...
- C语言中sizeof、strlen函数的部分理解
一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...
- 字符串赋值方式理解 sizeof 和strlen的一些区别
#include<stdio.h>#include<string.h> int main(){ int a,i=0; char ch[10000]; while(scanf( ...
- C语言-sizeof()与strlen()的区别【转】
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...
- Strlen()与sizeof()
在学习C语言时以及面试中,经常会见到strlen()与sizeof()这一对容易混淆的概念,搞清楚这两个概念,往往考察了编程人员对语言的基本掌握能力. 首先大家先明确两个概念是: 1.strlen() ...
- 【C++基础】sizeof 与 strlen的区别
要理解两者的区别,就要分别理解他们的本质 strlen(char *) 计算字符串的长度,内部实现是用一个循环计算字符串的长度,直到‘\0’为止 1.srtlen 是一个函数,参数只能为char 或者 ...
- sizeof和strlen小结
sizeof和strlen小结 写在前面 之所以要总结一下sizeof和strlen的用法和区别,是因为这些知识可以帮助我们更加深入的理解各种数据结构在内存中的占用情况,也许表面上看好像没有多大用处, ...
- sizeof求字节以及与strlen的区别
例子一: /* *根据以下条件进行计算: *1. 结构体的大小等于结构体内最大成员大小的整数倍 *2. 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相 ...
- 【转载】strlen与sizeof区别
自己小结: sizeof使用时,若是数组变量,则是数组变量占的大小 char a[10]; sizeof(a)=10 若是指针,则为指针大小,数组变量作为函数参数传递时,会退化成指针,且函数内是不知道 ...
- 有关 sizeof和strlen的总结
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...
随机推荐
- 在WSL Ubuntu中设置sshd自启动
参考: https://blog.csdn.net/android_cai_niao/article/details/128490566 ------------------------------- ...
- Apache SeaTunnel社区5月月报更新!
各位热爱 SeaTunnel 的小伙伴们,社区 5 月份月报来啦! SeaTunnel 正在迅猛发展,积极投入社区项目建设的小伙伴将促进SeaTunnel不断提升数据同步的高可扩展性.高性能及高可靠性 ...
- 系统IO常用函数接口
本文整理归纳了几种常用的系统IO的函数借口,以供读者查阅使用 目录 系统IO与标准IO的区别 打开文件:open 关闭文件:close 文件读取:read 文件写入:write 位置偏移:lseek ...
- 检测 NAT 类型
使用 pystun3 pystun3 是一个用于获取 NAT 类型和外部 IP 的 Python STUN 客户端 安装: pip install pystun3 使用: pystun3 结果: NA ...
- 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 可观测性之日志管理
Quickwit 从底层构建,旨在 高效地索引非结构化数据,并在云存储上轻松搜索这些数据. 此外,Quickwit 开箱即支持 OpenTelemetry gRPC 和 HTTP(仅 protobuf ...
- DASCTF 2024暑期挑战赛 RE
DASCTF 2024暑期挑战赛 DosSnake 使用ghidra看反汇编 发现有XOR操作 在ida里面看汇编跟一下 字符DASCTF地址往下6个存放的数据与DASCTF字符串进行异或 A=[0x ...
- Mac M1 汉化 postman V9.12.2
1. mac上安装 postman 访问:https://www.postman.com/downloads/ 选择 apple chip 2. 访问 https://github.com/hlmd/ ...
- 结合mysql 架构分析SQL查询语句和更新语句的执行
结合mysql 架构分析SQL查询语句和更新语句的执行 一:基础架构 mysql分为Server层和存储引擎层 Server层 涵盖了大多数mysql的核心服务功能,以及所有内置的函数(例如日期.加密 ...
- vue 中 elementUI el-table 实现滚动加载
vue 中 elementUI el-table 实现滚动加载 一.需求 vue 中 elementUI el-table 实现滚动加载,场景:当表格需要显示大量数据时,又想通过一页来进行展示数据. ...
- Node.js开发博客项目笔记-搭建环境(2)
搭建环境 首先新建blog-1文件夹,在文件夹下初始化package.json,执行命令: npm init -y 生成的package.json文件中的main属性默认值index.js改成bin/ ...
