当前位置: 首页 > news >正文

sizeof以及strlen的用法以及注意事项

大家都知道,在c中算字符串长度和所占空间大小事不可避免的,甚至再有的时候,我们在写代码的过程中,就会用到这些数据。比如,下面这道题


struct Test
{
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
int main()
{
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
return 0;
}

像这道题就是要算出结构体的字节数,才能完美的答出这道题的答案。结构体中存在对齐问题,不过也可以直接用sizeof来计算,结构体所占字节数是20.因为%p十一地址形式打印出来,所以他的答案就是0x00100014,0x00100001,0x00100004,下面是打印的结果

所以,我们一定要掌握好sizeof和strlen

注意事项:

sizeof:

1.首先要谨记,sizeof是操作符,不是函数。

2.在用sizeof运算时,sizeof括号中的表达式不参与计算,换句话说,他在乎的只是类型

strlen:

1.strlen所接收的参数是地址,如果给其传参传的不是地址,则会报错 

下面来看看sizeof和strlen的实际计算

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));           //16
printf("%d\n",sizeof(a+0));         //4/8
printf("%d\n",sizeof(*a));          //4
printf("%d\n",sizeof(a+1));         //4/8
printf("%d\n",sizeof(a[1]));        //4
printf("%d\n",sizeof(&a));          //4/8
printf("%d\n",sizeof(*&a));         //16
printf("%d\n",sizeof(&a+1));        //4/8
printf("%d\n",sizeof(&a[0]));       //4/8
printf("%d\n",sizeof(&a[0]+1))      //4/8

sizeof计算的是地址,在32位环境下是4,在64位环境下是8,而sizeof算的是数组名时,那么此时他计算的是整个数组的字节数,下面是打印结果(32位):

下面是64位:

 

再来看看strlen:

char arr[] = "abcdef";printf("%d\n", strlen(arr));       //6printf("%d\n", strlen(arr + 0));   //6printf("%d\n", strlen(*arr));      //错误printf("%d\n", strlen(arr[1]));    //错误printf("%d\n", strlen(&arr));      //6printf("%d\n", strlen(&arr + 1));  //随机值printf("%d\n", strlen(&arr[0] + 1));// 5

 上面说过,strlen 接收的是地址,所以不是地址的会出错,而strlen是以'\0'截止,就是碰到'\0'就会停止计算,所以,倒数第而个是因为他指向了整个数组的后面,我们不知道他什么时候有'\0',所以是随机值。

以上就是我对sizeof和strlen的讲解,如果对你们有用的话,希望大家点一下支持吧!!!

相关文章:

sizeof以及strlen的用法以及注意事项

大家都知道,在c中算字符串长度和所占空间大小事不可避免的,甚至再有的时候,我们在写代码的过程中,就会用到这些数据。比如,下面这道题 struct Test { int Num; char *pcName; short sDate; char cha[2]; short sBa[4];…...

数据结构-链表-单链表(3)

目录 1. 顺序表的缺陷 2. 单链表 2.1 单链表的基本结构与接口函数 2.2 重要接口 创建新节点的函数: 2.2.1 尾插 2.2.2 头插 2.2.3 尾删 2.2.4 头删 2.2.5 查找 2.2.6 插入 2.2.7 删除 2.2.8 从pos后面插入 2.2.9 从pos后面删除 3. 链表的缺陷与优势&…...

【SpringBoot初级篇】JdbcTemplate常用方法

【SpringBoot初级篇】JdbcTemplate常用方法JdbcTemplate 查询JdbcTemplate 插入、更新、删除execute执行任意的SQLNamedParameterJdbcTemplate函数场景说明update(String sql, Nullable Object… args)增,删,改queryForObject(sql, Integer.class)查询返…...

React(三):脚手架、组件化、生命周期、父子组件通信、插槽、Context

React(三)一、脚手架安装和创建1.安装脚手架2.创建脚手架3.看看脚手架目录4.运行脚手架二、脚手架下从0开始写代码三、组件化1.类组件2.函数组件四、React的生命周期1.认识生命周期2.图解生命周期(1)Constructor(2&…...

[教程]使用 Git 克隆指定分支

Git 是我们开发过程中经常使用到的版本管理工具,在平常情况下我们从远程克隆的时候会将整个库克隆下来,这会包括整个版本库的历史提交记录和远程库里的所有分支。但在一些情况下,比如我们并不需要查看历史提交记录而只是希望能够获取到最新的代码&#x…...

Redis实现服务注册与服务发现源码阅读(Go语言)

Redis实现服务注册与服务发现源码阅读 背景 近期在看开源项目CloudWeGo中看到目前GoLang微服务框架Hertz中支持通过Redis实现服务注册与服务发现功能。便想着阅读下源码 源码阅读 gut clone了hertz-contrib后看到在一级目录下有目前各种主流的服务注册与发现的实现方案。为…...

论文复现-3

模型构建中的运算 数据集是CONLL03 这个数据集共有4种实体类型,所以,在做实体描述的embedding时,得到的语义表示的Tensor大小为 : 4*max_len, 具体指的是: type_input_ids: torch.LongTensor None, type_attention_m…...

667知识点 | 经过三年实战检验的667知识清单

文章目录 前言第一章 信息与信息资源第二章 信息社会第三章 信息交流第四章 信息技术第五章 信息组织第六章 信息管理活动第七章 信息资源人文管理第八章 信息资源经济管理第九章 信息资源系统管理第十章 信息资源管理专门化前言 参考书目:《信息管理导论(第三版)》党跃武推…...

后端快速上手前端三剑客 HtmlCSSJavaScript

文章目录前言HTML1.基础标签2.多媒体标签:3.表格&列表&布局4.表单CSS1.简介2.导入方式3.选择器JavaScript1.简介2.引入方式3.基本语法4.对象(1) 基本对象(2) BOM对象(3) DOM对象5.事件前言 结构:HTML 表现:CSS 行为:Java…...

Cdiscount、Allegro如何利用测评补单自养号提升店铺权重和流量

Allegro成立于 1999 年是在波兰最受欢迎的电商平台,75%的波兰人都知道该网站,Allegro的品牌认知度在波兰高达98%。Allegro平台卖家的数量目前还是比较少的约为13万,最重要的就是中国卖家占比少,所以竞争也比较低,像是美…...

第16天-性能压测:压力测试,性能监控,优化QPS,Nginx动静分离

1.性能监控 1.1.JVM架构 运行时数据区: 方法区:最重要的内存区域,多线程共享,保存了类的信息(名称、成员、接口、父类),反射机制是重要的组成部分,动态进行类操作的实现;…...

【python 基础篇 十一】python的函数-------函数的偏函数 高阶函数 返回函数 匿名函数 闭包

目录1.偏函数2.高阶函数3.返回函数4.匿名函数5.闭包1.偏函数 概念 ​ 当我们写一个参数比较多的函数时,如果有些参数,大部分场景下都是某一个固定值,那么为了简化使用,就可以创建一个新函数,指定我们要使用的函数的某个…...

妇女节到了,祝福所有女神 Happy Women‘s Day!

在每年3月8日人们庆祝妇女节 Womens Day is cllebrated on March 8 every year.国际妇女节(IWD),中国内地称“三八”国际劳动妇女节或国际劳动妇女节。是在每年的3月8日为庆祝妇女在经济、政治和社会等领域作出的重要贡献和取得的…...

etcd集群通过 Leader 写入数据,为什么K8s HA集群中讲每个 kube-apiserver 只和本机的 ETCD 通信

写在前面 对这个我不太明白,所有在 stackOverflow 的请教了大佬这里分享给小伙伴理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整…...

HTML 表单

HTML 表单和输入 HTML 表单用于收集不同类型的用户输入。 在线实例 创建文本字段 (Text field) 本例演示如何在 HTML 页面创建文本域。用户可以在文本域中写入文本。 创建密码字段 本例演示如何创建 HTML 的密码域。 (在本页底端可以找到更多实例。) …...

HTML、CSS学习笔记5(移动端基础知识、Flex布局)

一、移动端基础知识 1.PC端和移动端区别 移动端:手机版网页,手机屏幕小,网页宽度多数为100%,没有版心 PC端:电脑版网页,屏幕大,网页固定版心 PC端和移动端不是同一个网页 2.如何在电脑里面…...

【Java学习笔记】2.Java 开发环境配置

Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境。 window系统安装java 下载JDK 首先我们需要下载 java 开发工具包 JDK,下载地址:https://www.oracle.com/java/technologies/downloads/,在下载页面中根据自己的系统选…...

MyBatis——进阶操作(2)

标签 if标签 当提交的表单中有些为非必填项&#xff0c;用户并没有上传这些属性的值&#xff0c;那么程序可以上传NUll&#xff0c;也可以用if标签判断用户有没有上传这个值 <if test"参数!null">操作 </if>其中test中填写一条语句&#xff0c;如果得…...

循环结构

循环结构循环结构一、课前问答二、while循环三、do-while循环四、for循环五、流程控制5.1 break5.2 continue循环结构 一、课前问答 1、switch支持的数据类型。 2、switch中break的作用。 3、多重if如果多个条件都成立&#xff0c;执行方式。 二、while循环 语法&#xff1a; …...

漫谈数据库表设计及索引设计

一.数据库表设计 在数据库表设计上有个很重要的设计准则&#xff0c;称为范式设计。 什么是范式设计&#xff1f; 范式来自英文Normal Form&#xff0c;简称NF。MySQL是关系型数据库&#xff0c;但是要想设计—个好的关系&#xff0c;必须使关系满足一定的约束条件&#xff0c…...

CSSCI论文写作03:确定论文的选题

什么是选题 选题:选择一个适合的研究指向!!! 选择: 而不是创造,创新是内在要求 你要坚信:所有的选题都有前人关注过研究过,我们不求“栽树”,只求“乘凉”,填补什么空白,只能说明自己的浅薄无知。 适合: 个人经验的学术表达,找到那双穿在自己脚上的鞋子没有不能…...

Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案

Html2Pdf高性能转换引擎&#xff1a;PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案 【免费下载链接】html2pdf OFFICIAL PROJECT | HTML to PDF converter written in PHP 项目地址: https://gitcode.com/gh_mirrors/ht/html2pdf 在当今企业数字化转型浪潮中&#xf…...

避坑指南:Python操作Word文档最常见的5个错误(python-docx实战心得)

Python-docx实战避坑指南&#xff1a;5个高频错误与解决方案 在自动化办公场景中&#xff0c;Python操作Word文档的需求日益增长&#xff0c;而python-docx库作为主流工具&#xff0c;其易用性背后隐藏着不少"暗礁"。许多开发者在基础教程阶段一帆风顺&#xff0c;却…...

精准匹配歌词:Foobar2000歌词插件配置完全指南

精准匹配歌词&#xff1a;Foobar2000歌词插件配置完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 3分钟完成版本适配检测 如何确定你的Foobar20…...

保姆级教程:用Docker Compose一键部署带汉化和HTTPS的n8n,并配置反向代理(Nginx)

企业级n8n自动化平台全栈部署实战&#xff1a;从容器编排到安全加固 在数字化转型浪潮中&#xff0c;自动化工作流平台已成为企业降本增效的核心基础设施。n8n作为GitHub上增长最快的开源自动化工具之一&#xff0c;凭借其可视化编排能力和400节点生态&#xff0c;正在重塑企业…...

HybridCLR Generate All报错终极解决指南:UnityLinker.exe找不到HotUpdate.dll怎么办?

HybridCLR Generate All报错终极解决指南&#xff1a;UnityLinker.exe找不到HotUpdate.dll怎么办&#xff1f; 当你正在使用HybridCLR进行Unity热更新开发时&#xff0c;突然遇到Generate All报错&#xff0c;提示UnityLinker.exe无法解析HotUpdate.dll&#xff0c;这确实会让人…...

彻底解决电脑噪音烦恼:FanControl风扇控制软件完全指南

彻底解决电脑噪音烦恼&#xff1a;FanControl风扇控制软件完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

当你能证明你的代码能带来流量时,你就永远不会被视为“垃圾”。

在商业世界里&#xff0c;代码本身没有价值&#xff0c;代码产生的结果才有价值。 如果你写的代码逻辑完美、架构优雅、注释清晰&#xff0c;但用户不用、业务不增长&#xff0c;那它在老板眼里就是“成本”&#xff0c;甚至是“垃圾”。如果你写的代码哪怕有些粗糙、用了“笨办…...

企业级 Agent SKILL 最佳实践

最近&#xff0c;真的是屁颠屁颠地使用Openclaw作为业务核心为客户打造智能体的工作流程&#xff0c;包括组织、业务、技术三个全面的转型。同时&#xff0c;由于OpenAI的Sora下线&#xff0c;年初刚刚建立的AI漫剧工作流&#xff0c;资产库以及提示词都需要转换成替代品。还有…...

【收藏干货】IndexRAG:离线生成桥接事实,实现单次检索的多跳推理

plaintext IndexRAG: Bridging Facts for Cross-Document Reasoning at Index Timehttps://arxiv.org/pdf/2603.16415 ### 一、多跳QA的困境多跳问答&#xff08;Multi-hop QA&#xff09;要求模型跨越多篇文档进行推理&#xff0c;比如回答"电影Aylwin的导演出生在哪里&q…...