关于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的模拟实现的更多相关文章

  1. strlen、strcmp、strcat、strlen、memmove

    #include <cassert> #include <iostream> using namespace std; /* strlen 返回字符串不包含结束符\0的长度 * ...

  2. C语言中sizeof、strlen函数的部分理解

    一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...

  3. 字符串赋值方式理解 sizeof 和strlen的一些区别

    #include<stdio.h>#include<string.h>  int main(){ int a,i=0; char ch[10000]; while(scanf( ...

  4. C语言-sizeof()与strlen()的区别【转】

    先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...

  5. Strlen()与sizeof()

    在学习C语言时以及面试中,经常会见到strlen()与sizeof()这一对容易混淆的概念,搞清楚这两个概念,往往考察了编程人员对语言的基本掌握能力. 首先大家先明确两个概念是: 1.strlen() ...

  6. 【C++基础】sizeof 与 strlen的区别

    要理解两者的区别,就要分别理解他们的本质 strlen(char *) 计算字符串的长度,内部实现是用一个循环计算字符串的长度,直到‘\0’为止 1.srtlen 是一个函数,参数只能为char 或者 ...

  7. sizeof和strlen小结

    sizeof和strlen小结 写在前面 之所以要总结一下sizeof和strlen的用法和区别,是因为这些知识可以帮助我们更加深入的理解各种数据结构在内存中的占用情况,也许表面上看好像没有多大用处, ...

  8. sizeof求字节以及与strlen的区别

    例子一: /* *根据以下条件进行计算: *1. 结构体的大小等于结构体内最大成员大小的整数倍 *2. 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相 ...

  9. 【转载】strlen与sizeof区别

    自己小结: sizeof使用时,若是数组变量,则是数组变量占的大小 char a[10]; sizeof(a)=10 若是指针,则为指针大小,数组变量作为函数参数传递时,会退化成指针,且函数内是不知道 ...

  10. 有关 sizeof和strlen的总结

    先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...

随机推荐

  1. 陆吾AI智能机械狗的通讯控制

    陆吾AI智能机械狗现在是蛮有名的了,在YouTube上比较火的一个东西了,和波士顿机器狗不同,波士顿机器狗价格昂贵主要原因是其定位于工业领域的机械狗因此采用的是工业级的硬件,但是如果我们采用的家用环境 ...

  2. 如何使用git通过ssh协议拉取gitee上的项目代码——如何正确的免密使用git

    如何在gitee网站上生成/添加SSH公钥见教程: 生成/添加SSH公钥 测试公私秘钥是否成功: ssh -T git@gitee.com ============================== ...

  3. CF1992场题解

    Only Pluses 算法:数学. 题意简述:有三个数,每次选择一个数 \(x\),使得 \(x\) 增加一,至多操作 \(5\) 次,最后求出这三个数的乘积最大值. 简单题,一眼秒了.考虑把这 \ ...

  4. 开源的 P2P 跨平台传文件应用「GitHub 热点速览」

    就在上周,发完那篇文章之后不久,我就有幸获得了 GitHub Models 服务公测的访问权限,所以就体验了一下 Playground 聊天功能. 起初,我以为这是"微软菩萨"降临 ...

  5. Word格式刷快捷键失效恢复方法

    突然某天写材料的时候发现word格式刷快捷键变成了Ctrl+Alt+C和Ctrl+Alt+V,用着这个别扭,于是探索如何改回Ctrl+Shift+C和Ctrl+Shift+V,下边是步骤记录. 打开w ...

  6. 使用分布式锁解决IM聊天数据重复插入的问题

    导航 业务背景 问题分析与定位 探索可行的解决方案 数据库层面处理--唯一索引 应用程序层面处理--分布式锁 分布式锁概述 分布式锁需要具备哪些特性? 分布式锁有哪些实现方式? 基于数据库的实现方式 ...

  7. 异源数据同步 → DataX 为什么要支持 kafka?

    开心一刻 昨天发了一条朋友圈:酒吧有什么好去的,上个月在酒吧当服务员兼职,一位大姐看上了我,说一个月给我 10 万,要我陪她去上海,我没同意 朋友评论道:你没同意,为什么在上海? 我回复到:上个月没同 ...

  8. 【DVWA】搭建安全测试环境

    一.搭建DVWA环境 用docker输入命令: docker run -d --name zc_dvwa -p 8081:80 vulnerables/web-dvwa 安装完成: 输入地址:http ...

  9. Android Adapter中组件EditText文本变化监听 addTextChangedListener

    问题背景:使用适配器显示一个列表,列表中Item中有EditText,滚动时会有EditText组件内容消失 步骤: 1. 在Adapter中,添加interface public interface ...

  10. spm 一阶分析的Microtime onset应该如何填写?

    1. 如果对数据进行了slice timing, 那么在进行一阶分析时应该修改microtime onset和 microtime resolution这两个参数, 假设数据的slice order= ...