C言語でmallocを使って文字列のポインター配列を割り当てるにはどうすればいいですか?質問する

C言語でmallocを使って文字列のポインター配列を割り当てるにはどうすればいいですか?質問する

C の例でこの構造体があります:

typedef struct 
{
    const char * array_pointers_of_strings [ 30 ];
    // etc.
} message;

文字列をソートするために、この array_pointers_of_strings を新しい配列にコピーする必要があります。アドレスをコピーするだけで済みます。

while ( i < 30 )
{
   new_array [i] = new_message->array_pointers_of_strings [i]; 
   // I need only copy adress of strings
}

私の質問は、文字列のアドレスのみに対して malloc() で new_array [i] を割り当てるにはどうすればよいかということです。

ベストアンサー1

while ループ内の代入ステートメントから理解できるように、代わりに文字列の配列が必要だと思います。

char** new_array;
new_array = malloc(30 * sizeof(char*)); // ignore casting malloc

注: =while ループで以下のように実行します。

new_array [i] = new_message->array_pointers_of_strings [i];

文字列のアドレスを割り当てているだけです(ディープコピーではありません)が、"文字列のアドレスのみ「だから、これがあなたが望んでいることだと思います。」

編集:警告「代入によりポインターターゲット型から修飾子が破棄されます」

この警告が表示されるのは、const の正確性のルールに違反するconst char*を に割り当てているためです。char*

new_array は次のように宣言する必要があります。

const  char** new_array;      

またはconstメッセージ構造から 'array_pointers_of_strings' の宣言を削除します。

おすすめ記事