1. 程式人生 > >怎樣獲取字串陣列的長度

怎樣獲取字串陣列的長度

假如存在如下的字串陣列
char* pArry[] = {"abc","defg","dddddd"};

怎樣計算這個陣列的長度。

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語言】

#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;

}

輸出為4

【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