2012-02-09 6 views
0

は私の元のための2D char配列cppの2d文字列配列の長さを見つける関数はありますか?

の長さを与えることができ、CPPのいずれかの作り付けの機能があり、引数

const char* args[] = {"412", "..7", ".58", "7.8", "32.", "6..", "351", "3.9", "985", "...", ".46"} 

する機能は、11

+0

http://ideone.com/ruKX3 –

+0

実際の関数が関数のパラメータは、ポインタに崩壊し、それを原因として配列を使用しているので、ありません。答えに与えられたマクロは、配列のスコープで使用できます。 –

+0

@David:参照渡しの場合、配列は減衰しません。 –

答えて

4

を返す必要がありますこれにより、要素の数はargsになります。

+0

そして、私が気付いたことだが、新しい気が散った他の方法の一つに行っても、古いC++コードとCコードの中でこの慣用句を覚えておく必要がある。 – Keith

+0

ええ、それは働く、ありがとう – rohanag

1

sizeof(args)/sizeof(*args)

7

これはuse a template functionです。

template <typename T, std::size_t N> 
std::size_t size(T(&)[N]) { return N; } 

sizeofを使用してのアプローチを超える利点は、あなたが誤ってポインタでそれを行うことができないということです。 C++ 11では

+0

バー、あなたとあなたの空想のテンプレートもの:) –

+1

+1特に、このバージョンは、ポインタを渡すとコンパイルに失敗します。代わりの 'sizeof A/sizeof A [0]'は、ポインタを渡すと間違った番号を返します。コンパイルに失敗すると、間違った答えを出すよりも常に良いです。 –

+0

'sizeof(args)/ sizeof(args [0]);' を試してみました。 私はテンプレートを使いたくないのですが、2d文字列の配列を初期化する方法がわかりません。 – rohanag

2

あなたが使用することができます。

std::end(args) - std::begin(args) 
関連する問題