2011-11-15 7 views
0

ポインタの配列に対して動的にメモリを割り当てる必要があります。Cでポインタ配列に動的にメモリを割り当てることはできますか?

は、私は、エラーを生成しているメモリを動的に割り当てるために、次のコードを使用

char *names[50]; 
char *element; 

、私たちは仮定しよう。その後

names=malloc(sizeof(char *)); 

、私はこの1つに別の文字ポインタを割り当てる必要があり、私は": warning: assignment from incompatible pointer type"としてエラーを取得しています

names=element; 

言います。

どうすれば解決できますか?

答えて

2

names = malloc(sizeof(char *));

(システムに応じて)4または8バイトのいずれかを割り当てます。これは、あなたの配列が既に宣言の50項目でサイズが決められているので意味がありません...

名前=要素;

これはCで配列が使用される方法ではありません。「名前」には50個の要素があり、それぞれが文字配列に異なるポインタとして割り当てられていると宣言しています。配列のどの要素を割り当てるかを決定する必要があります。 eaxampleについて:

char *test1 = "test string 1"; 
char *test2 = "test string 2"; 

names[0] = test1; // Assign pointer to string 1 to first element of array 
names[1] = test2; // Assign pointer to string 2 to second element of array 
1

あなたが動的にNchar *ポインタの配列を割り当てたい場合は、あなたが使用します。

char **names; 

names = malloc(N * sizeof p[0]); 

を配列の最初の要素にchar *elementを割り当てるには、あなたがして使用します。

names[0] = element; 
+0

修正。明確にするには、 "char ** names = malloc(sizeof(char)* 50);"のように "* names [50]"を動的に割り当てるコード。この時点では、50個のポインタのための領域があります。そして、50個の文字列のスペースを(別々に)割り当てる必要があります。 – paulsm4

関連する問題