2016-03-22 24 views
-3

質問として、char **配列に含まれる要素の数を読み取る方法はありますか?char **配列の要素数を取得する方法

次のコードprintの機能では、charppの配列の要素の数は、変数sizeofArrayを読み取ることなく見つける必要があります。

#include <iostream> 
using namespace std; 

char** charpp; 

void print(char** charpp){ 
    cout << "Size: " << sizeof(&charpp) << "\r\n"; 
    for(int i=0;i< sizeofArray;i++){ 
     if (charpp[i]!=NULL) 
      cout << i << " : " << charpp[i] << "\r\n"; 
    } 
} 

void main() { 
    int sizeofArray = 27; 

    charpp = new char*[sizeofArray]; 
    for(int i = 0; i < sizeofArray; i++) { 
     charpp[i] = NULL; 
    } 

    charpp[1] = "test1"; 
    charpp[5] = "test5"; 

    print(charpp); 

    charpp? delete(charpp):0; 
    cin.get(); 
} 

私は申し訳ありませんが不可能です。私は主にC#のJavaプログラマであり、両方の言語で文字列配列のサイズを見つけるのは簡単です。

+3

C++では、文字列配列のサイズを見つけることも簡単です。 C++の文字列配列は 'std :: vector 'と綴られています。 –

+0

@KerrekSB、はい、残念なことに私のコードではchar *を使用することを選択しました。文字列のサイズを探していません。要素の文字列配列のサイズを探しています – AaA

+0

できません。 'charpp'は配列ではなく、' char * 'へのポインタです。あなたは一緒にサイズを渡す必要があります。また、削除する前にnullをチェックする必要もありません。 'delete'は関数ではありません - ' delete [] charpp; 'はあなたが書くべきものです。 (おそらくあなたも[これらの](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)のいずれかが必要です。) – molbdnilo

答えて

1

C++配列にはサイズに関する情報が含まれていません。これは別の変数に格納する必要があります。

main(int argc, char* argv[]) は、サイズと配列自体の2つの引数をとります。

C++の最も簡単な解決策は、vector<char*>を使用することです。

+0

ありがとうございます。このコードは、12年前に誰か他の人によって書かれたものです。あなたのソリューションにはコードの変更がたくさん必要ですが、それ以上の価値があると思います。少なくとも私の後でコードを維持する人は私ほど苦しいことはありません。 – AaA

+1

問題はありませんが、main()の例のように、新しい関数を引数として配列のサイズにするのはなぜですか? – LearnOPhile

+1

以前のプログラマーは、配列のサイズと関数のグローバル変数を割り当てられ、そのグローバル変数からの配列のサイズのみを知っている別のスレッドから関数が呼び出されます。それは12年前に意味をなさないかもしれませんが、現在のデザインパターンでは恐ろしいように見えます。私は文字列とベクトルを使うことにしました。そして、6つのメソッドを変更するだけでした。私の後の人々はそれを感謝します。ありがとうございました – AaA

関連する問題