1. ホーム
  2. c

[解決済み] mallocで文字列の配列を動的に作成する。

2022-02-08 08:45:53

質問

C言語で文字列の配列を作成しようとしています。 malloc . 配列が保持する文字列の数は実行時に変更することができますが、文字列の長さは常に一貫しています。

私はこれを試しましたが(下記参照)、問題があります。正しい方向へのヒントは大いに感謝されます

#define ID_LEN 5
char *orderedIds;
int i;
int variableNumberOfElements = 5; /* Hard coded here */

orderedIds = malloc(variableNumberOfElements * (ID_LEN + 1));

最終的には、配列を使ってできるようにしたいです。

strcpy(orderedIds[0], string1);
strcpy(orderedIds[1], string2);
/* etc */

解決方法は?

文字列のポインタの配列を割り当て、各ポインタに文字列のための十分なメモリを割り当てる必要があります。

char **orderedIds;

orderedIds = malloc(variableNumberOfElements * sizeof(char*));
for (int i = 0; i < variableNumberOfElements; i++)
    orderedIds[i] = malloc((ID_LEN+1) * sizeof(char)); // yeah, I know sizeof(char) is 1, but to make it clear...

私には良い方法のように思えます。多くのmallocを実行しますが、特定の文字列のためにメモリを割り当てることは明らかで、文字列配列全体を解放することなく1つのメモリブロックを解放することができます" string array"。