C/C++中没有提供直接获取数组长度的函数。对于存放字符串的字符数组,可用strlen函数获取长度。

如:char a[]="hello world";int count = strlen(a);

对于其他类型的数组,可使用sizeof(array)/sizeof(array[0]),计算长度。

在C中,可在使用时把它定义成宏,

#define GET_ARRAY_LENGTH(array,len){len=(sizeof(array)/sizeof(array[0]));}

在C++中,可使用模板技术,定义这个函数,需要将数组参数作为引用类型传递,否则数组名称会退化为一个指针,这样就无法计算数组的大小sizeof(a)。

template<class T>
int GetArrayLen(T& a)
{
return sizeof(a)/sizeof(a[]);
}

对于存放字符串的字符数组,也可以使用这种方法来计算长度,但是计算后的值需要减去1,

即sizeof(a)/sizeof(a[0])-1,因为字符串默认带有结束符号'\0'

使用示例如下:
C语言:

#include<stdio.h>
#define GET_ARRAY_LENGTH(array,len){len=(sizeof(array)/sizeof(array[0]));}
int main()
{
char a[]={'','',''};
int num;
GET_ARRAY_LENGTH(a,num);
printf("%d\n",num);
return ;
}

C++语言:

#include<iostream>
template<class T>
int GetArrayLen(T& a)
{
return sizeof(a)/sizeof(a[]);
}
int main()
{
char a[]={'','',''};
int num = GetArrayLen(a);
std::cout<<num<<std::endl;
return ;
}

C/C++中获取数组的长度的更多相关文章

  1. C/C++中如何获取数组的长度?

    C.C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / ...

  2. C/C++中如何获取数组的长度(宏&模板)

    C.C++中没有提供 直接获取数组长度的函数.对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用  sizeof(array) ...

  3. C/C++中如何获取数组的长度?

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

  4. C/C++获取数组的长度

    C.C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / ...

  5. C++获取数组的长度

    C++获取数组的长度 #include<iostream> using namespace std; template<class T> int length(T& a ...

  6. PHP中获取数组中单列的值

    PHP中获取数组中单列的值如下: 利用PHP中的数组函数 array_column():返回数组中某个单列的值.(PHP 5.5+适用) 语法: array_column(array,column_k ...

  7. C#中获取数组中相加和最接近或等于(<=)给定值的算法

    , ,,,,,,,,, }; List<List<int>> mylist = new List<List<int>>(); int length = ...

  8. shell 脚本获取数组字符串长度

    #!/bin/sh source /etc/init.d/functions funOne() { array=(I am dfh kjlhfjksdf sdfj jdkfhaskl mjjoldfu ...

  9. c#中获取数组的行列个数的方法

    GetUpperBound可以获取数组的最高下标.GetLowerBound可以获取数组的最低下标.这样就可以实现对数组的遍历//定义二维数组string[,] myStrArr2=new strin ...

随机推荐

  1. 动态设置js的属性

    目标:js的属性名能够使用变量 举例:js对象object,当赋给该对象属性的时候能够採用下面方式 var object; object.prop1 = "value1"; obj ...

  2. 简单的Stack

    自己实现的简单的Stack.没有查空满.用于算法考试 #include<iostream> using namespace std; const int MAX = 100; struct ...

  3. linux 使用wc命令统计文件行数、字数及大小

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  4. log4j 日志 配置 学习

    1.用的flume-log4j  avrosource的整合 2.学习如何指定类打印日志 #log4j.rootLogger=INFO,flume 这个是将全部的日志会打印出来 log4j.logge ...

  5. 设置Linux-Centos6.5字符集

    登录腾讯云的服务,发现不支持中文字符.草蛋疼....  01.查看Linux当前语言 echo $LANG C    #C代表英文环境 ASCII 编码格式,通杀很多问题(乱码) 02.查看系统支持的 ...

  6. 如何架设部署V2EX社区/论坛(Google App Engine版)

    1.What's V2EX? 关于这个问题,我们可以看看其作者Livid早期自己的V2EX社区的介绍: What's V2EX? 这是很多人都问过的问题,而我一直都没有做出一个明确的解答.因为我实在觉 ...

  7. PHP中的密码加密的解决方案

    层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃 一般的解决方案 1.将明文密码做单向hash $password = md5($_POST[ ...

  8. xargs详解

    一.场景 这个命令是错误的 find ./ -perm +700 |ls -l 这样才是正确的 find ./ -perm +700 |xargs ls -l  二.用法 [root@localhos ...

  9. 架构-LAMP特级学习(网站加速解决方案)

    1.Squid代理缓存技术 2.页面静态化缓存技术 3.Memcache.Redis等缓存服务器 4.Sphinx搜索加速

  10. HDUOJ--------(1198)Farm Irrigation

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...