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

[C/C++]_[初级]_[声明和使用字符串常量和字节常量]

场景

  1. 我们需要存储常量的字节数组,并且数组里的字节数据可以是任意数值0-255。怎么存储?

说明

  1. 任意字节数组可以使用char或者unsigned char作为数据类型。比如以下的字符串声明。这种字符串数据可以通过strlen(buf)来计算它的长度,它会遇到\0结束。常量字符串会自动在末尾增加一个\0结束符。
const char* buf = "helloworld";
  1. 如果常量字节数据带了\0字符,即0值,那么这种常量字符串就不适合,因为计算不了它的长度。这时候就可以使用字符数组,如以下的声明。这时候如果buf的长度可以通过sizeof(buf)来获取它的大小。但是也因为未预先定义大小的声明方式[],字符串初始化在后边自动添加一个\0字符,所以它的实际大小需要减一,sizeof(buf)-1. 这种数组声明可以有效的存储任意可见不可见字符,\0字符等,所以使用它来存储常量字节数据是最合适的。比如某些文件的文件头是固定的常量,我们需要进行比较,就使用字符数组最合适。
char buf[] = "helloworld";
char buf3_1[] = "\xff\x0e\x00\xae";
unsigned char buf4[] = "\xff\x0e\x00\xae";strncmp(buf,buf3_1,4);
  1. 如果需要存储十六进制字符,可以通过\x开头来表示。

例子

  1. 这里例子说明了sizeofstrlen的使用,并对比了字符数组和常量字符串的计算大小的方式。
#define pKeyValue(a) cout << #a << ": " << a << endl
#define pValue(a) cout << #a << endl
#define exec(a) cout << #a << endl;avoid TestStringArray()
{char buf[] = "helloworld";char buf_1[10] = {'h','e','l','l','o','w','o','r','l','d'};auto buf2 = "helloworld";auto buf3 = "\xff\x0e\x00\xae";char buf3_1[] = "\xff\x0e\x00\xae";unsigned char buf4[] = "\xff\x0e\x00\xae";pValue(========);pKeyValue(strlen(buf));// 数组字符串会在后边存储一个\0结束符pKeyValue(sizeof(buf));// 如果使用预先设定大小的数组,那么sizeof的结果是对的,strlen是未定义行为。// -- 因为数组后边的地址存储的数据不一定是\0结束符。pValue(========);pKeyValue(sizeof(buf_1));pKeyValue(strlen(buf_1));pValue(========);pKeyValue(strlen(buf2));pKeyValue(sizeof(buf2));pKeyValue(strlen(buf3));pValue(========);pKeyValue(strlen(buf3_1));pKeyValue(sizeof(buf3_1));// 有效数据的大小需要减一pKeyValue(sizeof(buf3_1)-1);pValue(========);pKeyValue(sizeof(buf4));}

输出

========
strlen(buf): 10
sizeof(buf): 11
========
sizeof(buf_1): 10
strlen(buf_1): 30
========
strlen(buf2): 10
sizeof(buf2): 4
strlen(buf3): 2
========
strlen(buf3_1): 2
sizeof(buf3_1): 5
sizeof(buf3_1)-1: 4
========
sizeof(buf4): 5

参考

  1. 关于数组的初始化问题

  2. 关于使用0初始化结构体的解析

相关文章:

[C/C++]_[初级]_[声明和使用字符串常量和字节常量]

场景 我们需要存储常量的字节数组&#xff0c;并且数组里的字节数据可以是任意数值0-255。怎么存储&#xff1f; 说明 任意字节数组可以使用char或者unsigned char作为数据类型。比如以下的字符串声明。这种字符串数据可以通过strlen(buf)来计算它的长度&#xff0c;它会遇到…...

解Bug之路-Nginx 502 Bad Gateway

前言 事实证明&#xff0c;读过Linux内核源码确实有很大的好处&#xff0c;尤其在处理问题的时刻。当你看到报错的那一瞬间&#xff0c;就能把现象/原因/以及解决方案一股脑的在脑中闪现。甚至一些边边角角的现象都能很快的反应过来是为何。笔者读过一些Linux TCP协议栈的源码…...

目标检测 pytorch复现R-CNN目标检测项目

目标检测 pytorch复现R-CNN目标检测项目1、R-CNN目标检测项目基本流程思路2、项目实现1 、数据集下载&#xff1a;2、车辆数据集抽取3、创建分类器数据集3、微调二分类网络模型4、分类器训练5、边界框回归器训练6、效果测试目标检测 R-CNN论文详细讲解1、R-CNN目标检测项目基本…...

荧光染料IR-825 NHS,IR825 NHS ester,IR825 SE,IR-825 活性酯

IR825 NHS理论分析&#xff1a;中文名&#xff1a;新吲哚菁绿-琥珀酰亚胺酯&#xff0c;IR-825 琥珀酰亚胺酯&#xff0c;IR-825 活性酯英文名&#xff1a;IR825 NHS&#xff0c;IR-825 NHS&#xff0c;IR825 NHS ester&#xff0c;IR825 SECAS号&#xff1a;N/AIR825 NHS产品详…...

利用Postman的简单运用解决小问题的过程

这几天在修改一个前后端分离的商城项目。项目前端向后端发出数据请求之后&#xff0c;收到的却是504网关超时错误。 但是控制台却不止报错了网关超时&#xff0c;还有跨域请求的问题&#xff1a; 根本搞不清是哪个问题导致了另外一个问题还是独立的两个问题。 直接点击网址访…...

【C语言】8道经典指针笔试题(深度解剖)

上一篇我们也介绍了指针的笔试题&#xff0c;这一篇我们趁热打铁继续讲解8道指针更有趣的笔试题&#xff0c;&#xff0c;让大家更加深刻了解指针&#xff0c;从而也拿下【C语言】指针这个难点! 本次解析是在x86&#xff08;32位&#xff09;平台下进行 文章目录所需储备知识笔…...

操作系统内核与安全分析课程笔记【2】进程管理与调度

文章目录基本概念与关键数据结构进程管理进程生命周期进程的关系进程家族树线程组进程组与会话进程的创建与终止Linux中的线程基本概念与关键数据结构 进程&#xff1a;静态的&#xff0c;存储在磁盘上的代码与数据。 程序&#xff1a;动态的&#xff0c;执行程序的动态过程&am…...

看完书上的栈不过瘾,为什么不动手试试呢?

一.栈的基本概念1.栈的定义栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。其中注意几点&#xff1a;栈顶&#xff08;Top&#xff09;&#xff1a;线性表…...

AbstractQueuedSynchronizer从入门到踹门

概念设计初衷&#xff1a;该类利用 状态队列 实现了一个同步器&#xff0c;更多的是提供一些模板方法&#xff08;子类必须重写&#xff0c;不然会抛错&#xff09;。 设计功能&#xff1a;独占、共享模式两个核心&#xff0c;state、Queue2.1 statesetState、compareAndSetSta…...

【项目实战】手把手教你Dubbo微服务架构中整合熔断限流组件Sentinel

一、背景 项目中需要引入Sentinel来实现限流,但是项目是基于Dubbo的微服务架构,我们都知道Sentinel是属于SpringCloudAlibaba组件下的限流中间件,基于Dubbo的微服务架构真的能够引入 Sentinel吗?带着疑惑的心情,实践了一把~ 二、使用说明 2.1 引入依赖文件 <!-- Se…...

图像主题颜色提取(Median cut)

前言 之前想对图片素材进行分类管理&#xff0c;除了打标签&#xff0c;还有一样是通过主题色进行分类。于是开始寻找能提取主主题色的工具&#xff0c;最后找到了大名鼎鼎的 Leptonica 库&#xff0c;其中就有中位切割算法的实现。下面附上中位切割算法的其它语言版本的实现。…...

Python 分支结构

Python 分支结构 应用场景 迄今为止&#xff0c;我们写的Python代码都是一条一条语句顺序执行&#xff0c;这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题&#xff0c;比如我们设计一个游戏&#xff0c;游戏第一关的通关条件是玩家获得1000分&#x…...

【C++知识点】文件操作

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…...

VBA小模板,跨表统计的2种写法

目标 1 统计一个excel 文件里&#xff0c;多个sheet里的内容2 有的统计需求是&#xff0c;每个表只单表统计&#xff0c;只是进行批量操作3 有的需求是&#xff0c;多个表得某些行列累加等造出来得文件 2 实现方法1 &#xff08;可能只适合VBAEXCEL&#xff0c;不太干净的写法…...

部署问题 | 百度LAC安装部署清单

本项目实现基于LAC提供RESTAPI服务的最小化方案。 依赖&#xff1a; python-3.9.9 百度lac2.X fastAPI uvicorn 首先下载并安装python&#xff0c;本人选择3.9版本。 依次安装&#xff1a; 安装 vc vc_redist.x64.exe 64位&#xff1a;https://download.microsoft.com/…...

提高办公效率的免费网站有哪些

收藏一些免费好用的网站&#xff0c;在我们工作中需要用到的时候可以直接使用&#xff0c;提高我们的工作效率。小编就和大家分享10个可以提高我们办公效率的免费网站。 1.羽兔网软件下载-以设计类软件为主的免费软件下载网站 很多小白都不知道怎么下载软件&#xff0c;往往搜…...

前端开发者需要掌握的具体内容和步骤

第一部分:前端开发实践 前端的工作职称 下面是一个前端开发者在职业发展中各种职称的描述列表. 对于前端开发者最普遍的职称是 "前端开发者" 或者 "前端工程师", 可以根据任何包含 "前端", "客户端", "web UI", "CS…...

杨校老师课堂之基于File类的文件管理器

在日常工作中&#xff0c;经常会遇到批量操作系统文件的事情&#xff0c;通常情况下&#xff0c;只能手动重复的完成批量文件的操作&#xff0c;这样很是费时费力。 本案例要求编写一个文件管理器&#xff0c;实现文件的批量操作。 文件管理器具体功能要求如下&#xff1a; 用…...

java面试算法汇总-数组

数组 [程序一] 两数之和 &#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,…...

Docker-Mysql主从复制

步骤 1、新建主服务器容器实例3307 docker run -d -p 3307:3306 --privileged=true -v /tmp/mysql_master/log:/var/log/mysql -v /tmp/mysql_master/data:/var/lib/mysql -v /tmp/mysql_master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql-master mys…...

群晖NAS进阶指南:借助Docker容器部署全能DDNS服务,实现多平台域名与公网IP智能同步

1. 为什么需要全能DDNS服务&#xff1f; 家里有群晖NAS的朋友可能都遇到过这样的烦恼&#xff1a;明明设置了外网访问&#xff0c;但过几天就失效了。这是因为大多数家庭宽带分配的都是动态公网IP&#xff0c;运营商会定期更换你的IP地址。想象一下&#xff0c;这就像你的手机…...

保姆级教程:手把手教你用Keil 5为APM32F030C6搭建第一个工程(附固件库下载与常见编译错误解决)

从零到一&#xff1a;APM32F030C6在Keil 5上的工程搭建实战指南 第一次接触极海APM32系列芯片的开发者&#xff0c;往往会被陌生的开发环境和复杂的固件库结构弄得手足无措。不同于常见的STM32生态&#xff0c;APM32虽然硬件兼容但软件配置上存在不少差异点。本文将带你用Keil …...

[具身智能-653]:人的大脑神经网络就是天然的模拟电路,还是数字电路?

结论先给&#xff1a;人脑神经网络&#xff0c;本质是【天然模拟电路】&#xff0c;不是数字电路这和前面聊的模拟电路频域特性、硬件隐式频域滤波完全同逻辑。一、先分清&#xff1a;数字电路 vs 模拟电路 核心区别数字电路只有0、1两种离散电平&#xff0c;跳变是阶跃式&…...

Web技术为何称王?五大核心优势碾压原生应用,一文读懂现代Web的统治力

本文深入剖析Web技术&#xff08;涵盖H5、PWA及现代Web App&#xff09;相对于原生APP的五大核心优势&#xff1a;跨平台低成本、免安装热更新、无缝分发能力、技术生态与标准演进、AI融合前景。通过详实的数据对比与技术架构拆解&#xff0c;揭示为什么Web依然是数字世界的终极…...

如何轻松掌握开源OCR插件的实用技巧:5步快速上手指南

如何轻松掌握开源OCR插件的实用技巧&#xff1a;5步快速上手指南 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 你是否曾被纸质文档的数字化问题困扰&#xff1f;或者需要从图片中提取数学公式却找不到…...

告别手动重命名!Win10下用记事本写个.bat脚本,5分钟搞定图片批量编号(001.jpg到999.jpg)

零基础玩转Windows批量重命名&#xff1a;用记事本5分钟打造专属文件编号神器 每次旅行归来或项目结束&#xff0c;手机相册里堆积如山的照片总让人头疼——"IMG_20230401_123456.jpg"这类毫无规律的命名&#xff0c;既难查找又难管理。专业摄影师和自媒体博主们早就…...

装修预算告急?办公室墙面选对乳胶漆+木饰面,省一半钱还显高级

办公室墙面装修&#xff0c;最纠结的问题莫过于&#xff1a;选乳胶漆还是木饰面&#xff1f;前者经济实用、灵活百搭&#xff0c;后者质感高级、温润大气&#xff0c;很多企业在二者之间反复权衡&#xff0c;却忽略了一个关键答案——乳胶漆与木饰面搭配使用&#xff0c;才是兼…...

深入解析WeChatFerry:基于RPC与进程注入的微信自动化框架

1. 项目概述&#xff1a;一个为微信自动化而生的强力引擎如果你正在寻找一个能够稳定、高效地控制微信客户端进行自动化操作的解决方案&#xff0c;那么lich0821/WeChatFerry这个项目绝对值得你花时间深入研究。它不是一个简单的消息发送工具&#xff0c;而是一个基于 RPC&…...

2026年全国优质化妆培训机构深度盘点

颜值经济持续升温背景下&#xff0c;2026年化妆行业迎来规范化、专业化发展新阶段&#xff0c;涵盖影视、时尚、婚庆等多个领域&#xff0c;市场对专业化妆人才的需求持续攀升。据相关行业数据显示&#xff0c;2026年美业职业培训市场预计保持11%以上增速&#xff0c;美业门店专…...

从零手写CNN:理解卷积网络的生物学原理与工程逻辑

1. 项目概述&#xff1a;从人眼到机器之眼&#xff0c;一次真实的视觉理解之旅你有没有盯着一张照片发过呆&#xff1f;比如朋友刚发来的旅行照——蓝天、雪山、一只歪头的雪豹。你几乎是一瞬间就认出了“雪豹”&#xff0c;甚至能判断它“在看镜头”“毛很厚”“可能刚睡醒”。…...