2011-07-12 10 views
0

への入力として渡された私はは、charのサイズを取得*配列は、C++の関数

char* LowerList[10]; 
LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij"; 

(Cラッパーで利用可能)C++関数にCのテストドライバーからの入力として、文字ポインタの配列を渡すしようとしています私は、配列のサイズを取得する必要がある要素は

char* LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij"; 
LowerList[3]=ƒì¶S<\$ UV<35?Ä@ 
LowerList[34]=ƒ<bad pointer> 

として表示されているために表示される値は、私は しばらく(LowerList [回数を使用して持っている可能性がC++サイズに渡すときに利用できるC++側])が、ジャンク値のためにそうすることができません。 私はchar * LowerList []の正しいサイズを初期化、メモリ割り当て、またはベクトルへの変換によって見つけることができれば教えてください。

は、ここではタイプミス、エラーのために

を上記のコードを修正し、これまで私に与えられた提案のいくつかの私のコメントである:

1)制限をよくとしてパラメータとして配列のサイズを渡します私のシナリオでは.2)ベクトルへの変換は、使用可能なサイズが必要です。3)追加する必要がある位置のSentinel値。前に述べたように、私はユーザーが失敗につながる3として値を渡すシナリオを処理しようとしています。CユーザーのC++ラッパーをCテストドライバーで制限することについては何も制御していません。

答えて

1

私が間違っていない場合、ポインタLowerList[3]からLowerList[9]はすべて初期化されていません。

char* LowerList[10] = { "abc", "def", "hij" }; 

これはNULLにアレイ内の残りのポインタを初期化する必要があります:あなたは、常にちょうどセンチネル値としてNULLを使用して、明示的にそれを割り当てるか、このような何かを行うことができます。

#define LOWER_LIST_SIZE 10 
#define MINIMUM_SIZE 2 

#if LOWER_LIST_SIZE < MINIMUM_SIZE 
    #error "LOWER_LIST_SIZE must be >= MINIMUM_SIZE" 
#endif 

char *LowerList[LOWER_LIST_SIZE] = // etc. 

またはそのような何か:あなたの第二のコメントに応えて


http://en.wikipedia.org/wiki/C_preprocessor#User-defined_compilation_errors_and_warnings

+0

あなたの答えをありがとう。私はこの初期設定で正しいサイズを持っています。 – Abhilash

+0

もう1つのポイントはありますか?私のCのテストドライバで、lowerList [10]を初期化できる方法はありますか?C++ラッパーにアクセスするCラッパーのコードとして10を指定しないでサイズが小さければアクセス違反エラーです例2これは、Cテストドライバのコンパイルが2のサイズであっても成功し、実行中に失敗するため、私のCテストドライバを簡単にすることです。 – Abhilash

+0

@Abhilash:最新の回答をご覧ください。 – JAB

1

さらに、与えられたとして、あなたの初期化は完全に間違っています。あなたは持っている:

char* LowerList[10]; 
LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij"; 

またはJABが持つ代替:何がしたいことはある

char* LowerList[10]; 
char* LowerList[0]="abc"; 
char* LowerList[1]="def"; 
char* LowerList[2]="hij"; 

。あなたのバージョンの問題は基本的にLowerListを4回宣言していることですが、それはできません。

+0

Heh、何とか私は完全にそれを逃しました。 – JAB