怎样获取字符串数组的长度_使用sizeof(array) / sizeof(array[0])

使用sizeof()

C、C++中没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?

其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。

而在C++中则可以使用模板技术定义一个函数,比如:

template <class T>
int getArrayLen(T& array)
{return (sizeof(array) / sizeof(array[0]));
}

这样对于一些简单的数组可以使用这个宏或者这个函数来获取数组的长度了。

以下是两个Demo程序,一个C语言的,一个C++的:

PS:若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组

例如:char a[]="abcdefg"或者char a[]={"abcdefg"}

则所求得的长度为字符数组的长度,而不是对应的字符串的长度,要求字符串的长度还需要减一

原因为存储字符串的字符数组末尾有一个'\0'字符,需要去掉它。

对于char a[]="abcdefg"

sizeof(a)/sizeof(a[0])=8,要求字符串长度的话应该减1.

但对于char a[]={'a','b','c','d','e','f','g'}

sizeof(a)/sizeof(a[0])=7

【C语言】

输出为4

#include <stdio.h>
#include <stdlib.h>
#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}//定义一个带参数的宏,将数组长度存储在变量len中
int main()
{char a[] = {'1','2','3','4'};int len;GET_ARRAY_LEN(a,len) //调用预定义的宏,取得数组a的长度,并将其存储在变量len中printf("%d\n",len);system("pause");return 0;
}

【C++】

#include <iostream>
using namespace std;template <class T>
int getArrayLen(T& array)  //使用模板定义一个函数getArrayLen,该函数将返回数组array的长度
{ return (sizeof(array) / sizeof(array[0]));
}int main()
{char a[] = {'1','2','3'};cout << getArrayLen(a) << endl;return 0;
}

输出为3

Sizeof 和 strlen

strlen()从字符串的开头位置依次往后面计数,直到遇到‘\0’停止,所计算的字符串大小为‘\0’以前的字符所计算的值,最终的字符串长度不包括‘\0’.

测试对比示例

int main(int argc, char **argv) {//DUMP_NECESSARY_LOG_TO_UOS("cv", "hahhahh");char mes_1[1024];std::cout << "mes_1 strlen(mes_1) = " << strlen(mes_1) << std::endl; //不正确的用法, 结果未知  xstd::cout << "mes_1 sizeof(mes_1) = " << sizeof(mes_1) << std::endl; //正确用法,不推荐 xstd::cout << "==> mes_1 sizeof(mes_1)/sizeof(mes_1[0])  = " << sizeof(mes_1)/sizeof(mes_1[0]) << std::endl; //正确用法 vint mes_int_1[1024];//std::cout << "mes_int_1 sizeof(mes_int_1) = " << strlen(mes_int_1) << std::endl; //求长度的错误用法  xstd::cout << "mes_int_1 sizeof(mes_int_1) = " << sizeof(mes_int_1) << std::endl; //求长度的错误用法  xstd::cout << "==> mes_int_1 sizeof(mes_int_1)/sizeof(mes_int_1[0])  = " << sizeof(mes_int_1)/sizeof(mes_int_1[0]) << std::endl; //正确用法  vchar mes_2[1024];memset(mes_2,0,1024);std::cout << "mes_2 strlen(mes_2) = " << strlen(mes_2) << std::endl; //求长度的错误用法, 结果=0    x//   0//   '0'//   '\0'return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将两台Mac显示器设置为单个屏幕配置

​能够在扩展模式下将两个或多个外部显示器连接到Mac是一种解放的屏幕体验&#xff0c;但当每个显示器仍然像独立显示器一样工作时&#xff0c;会导致沮丧。 在这里&#xff0c;我们向你展示如何通过对系统设置进行一些简单的更改&#xff0c;使两个扩展屏幕看起来像一个屏幕。…

【MyBatis】四、MyBatis中的动态SQL标签

动态SQL 动态SQL语句是动态的拼接Mybatis中SQL语句的情况&#xff0c;可以动态的在Mybatis中使用SQL if语句 if语句的xml文件&#xff1a; <!-- List<Emp> getEmpByCondition(Emp emp);--><select id"getEmpByCondition" resultType"Emp&…

C++(20):自定义类型的format

C++(20):format格式化字符串_风静如云的博客-CSDN博客 介绍了如何使用format。 对于自定义类型可以定义适配其需求的format: #include <format> #include <string> #include <iostream> using namespace std; template<class T> class KeyValue { …

【代码随想录day24】不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xf…

数据结构与算法基础-学习-32-选择排序之简单选择排序、堆排序

目录 一、简单选择排序基本思路 二、简单选择排序基本操作 三、简单选择排序算法思路 四、简单选择排序代码 1、SimpleSelectSortSentrySqQueue 五、简单选择排序算法分析 1、记录移动次数 2、记录比较次数 六、简单选择排序Linux环境编译测试 七、堆的定义 八、堆调…

【前端】for循环中 使用 v-model:value 导致引用重复

如果您在循环中使用 v-model:value 导致引用重复的问题&#xff0c;通常是因为 Vue.js 会生成相同的 v-model 绑定&#xff0c;导致引用冲突。为了解决这个问题&#xff0c;您可以采取以下一些方法之一&#xff1a; 使用唯一的属性名&#xff1a; 在循环中&#xff0c;确保每个…

catface,使用Interface定义Controller,实现基于Http协议的RPC调用

catface 前言cat-client 模块EnableCatClientCatClientCatMethodCatNoteCatResponesWrapperCatClientConfigurationCatClientProviderCatClientFactoryCatSendInterceptorCatHttpCatPayloadResolverCatObjectResolverCatLoggerProcessorCatResultProcessorCatSendProcessorAbst…

A6120 Emerson 机箱地震振动监测器

A6120 Emerson 机箱地震振动监测器 艾默生过程管理公司宣布&#xff0c;PlantWeb数字工厂架构已经安装在化学工业CATCH(技术能力评估中心)培训中心&#xff0c;该中心位于北林肯郡格里姆斯比附近的Stallingborough。这座价值820万英镑的设施是为了满足行业对培训中心的需求而开…

教师如何私密发布成绩查询?

随着科技的不断发展&#xff0c;教育领域也逐渐引入了各种在线工具来提高教学效果和管理效率。其中&#xff0c;易查分作为一款功能强大的在线查询工具&#xff0c;帮助老师们更好的利用该工具进行成绩查询。 好消息&#xff01;博主给大家争取到的易查分福利&#xff0c;只需要…

C++中的红黑树

红黑树 搜索二叉树搜索二叉树的模拟实现平衡搜索二叉树(AVL Tree)平衡搜索二叉树的模拟实现红黑树(Red Black Tree)红黑树的模拟实现 红黑树的应用(Map 和 Set)Map和Set的封装 搜索二叉树 搜索二叉树的概念&#xff1a;二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

电脑文件批量重命名:高效操作技巧

随着时间的推移&#xff0c;我们积累的文件和文件夹数量越来越多&#xff0c;需要对它们进行合理的命名和管理&#xff0c;以便更方便地查找和利用。而文件批量重命名功能可以帮助我们更高效地管理文件夹。下面介绍五种方式&#xff0c;帮助你更好地利用文件批量重命名工具&…

leetcode刷题--栈与递归

文章目录 1. 682 棒球比赛2. 71 简化路径3. 388 文件的最长绝对路径4. 150 逆波兰表达式求值5. 227. 基本计算器II6. 224. 基本计算器7. 20. 有效的括号8. 636. 函数的独占时间9. 591. 标签验证器10. 32.最长有效括号12. 341. 扁平化嵌套列表迭代器13. 394.字符串解码 1. 682 棒…

算法之双指针题型:

双指针例题小总结&#xff1a; 力扣27&#xff1a; 移除元素 力扣题目链接 双指针分为&#xff1a; 快慢双指针&#xff1a;同一个起点&#xff0c;同向出发 相向双指针&#xff1a;从两端出发&#xff0c;方向相反&#xff0c;终会相遇 经典的双指针&#xff08;快慢双指…

消息队列理解

rocketMQ RocketMQ消息存储原理_码上得天下的博客-CSDN博客 领域模型概述 | RocketMQ kafka Kafka基本架构介绍-腾讯云开发者社区-腾讯云 看完这篇Kafka&#xff0c;你也许就会了Kafka_心的步伐的博客-CSDN博客 Apache Kafka

技术解码 | GB28181/SIP/SDP 协议--EasyGBS国标GB28181平台国标视频技术SDP解析

EasyGBS去年更换了新内核&#xff0c;新内核版本的平台性能更加稳定&#xff0c;我们也在不断对平台进行持续的功能优化和升级&#xff0c;始终保持EasyGBS平台在安防视频监控市场的技术先进性。EasyGBS拥有视频直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台…

Tomcat服务的部署及配置优化

文章目录 1. Tomcat的相关介绍1.1 Tomcat简介1.2 Tomcat的核心组件1.2.1 Web容器1.2.2 Servlet容器1.2.3 JSP容器 1.3 Tomcat的功能组件1.3.1 connector连接器1.3.2 container容器1.3.2.1 子容器及其相关功能 1.4 主要作用1.5 Tmocat处理请求的过程 2. Tomcata服务部署2.1 安装…

jira获取issue条目transitions id,以用来进行流转实用脚本

官方文档链接地址&#xff1a; The Jira Cloud platform REST API GET Get transitions Returns either all transitions or a transition that can be performed by the user on an issue, based on the issues status. Note, if a request is made for a transition that do…

Httpservletrequest与Httpservletresponse

目录 一、Httpservletrequest 1.1什么是Httpservletrequest 1.2Httpservletrequest中的方法 二、Httpservletresponse 1.1什么是Httpservletresponse 1.2Httpservletresponse的方法 一、Httpservletrequest 1.1什么是Httpservletrequest HttpServletRequest&#xff08;…

CPU和GPU性能优化

在Unity游戏开发中&#xff0c;优化CPU和GPU的性能是非常重要的&#xff0c;可以提高游戏的运行效率、降低功耗和延迟&#xff0c;并提高用户体验。以下是一些优化CPU和GPU性能的方法&#xff1a; 1.优化游戏逻辑和算法 减少不必要的计算和内存操作&#xff0c;例如避免频繁的…

VSCode自动分析代码的插件

今天来给大伙介绍一款非常好用的插件&#xff0c;它能够自动分析代码&#xff0c;并帮你完成代码的编写 效果如下图 首先我们用的是VSCode&#xff0c;&#xff08;免费随便下&#xff09; 找到扩展&#xff0c;搜索CodeGeeX&#xff0c;将它下载好&#xff0c;就可以实现了 到…