0
char words[wordCount][MAX_WORD_LENGTH];

配列の長さをユーザー定義できるようにするには、malloc を使用する必要があることはわかっていますが、2 次元配列でこれを行うにはどうすればよいでしょうか?

char words[MAX_WORD_LENGTH];
words = (words *) malloc (wordCount)

そのようなものは機能しますか?cを使い始めたばかりなので、まだ慣れています。

4

5 に答える 5

0

単語配列内の各単語ポインタのサイズをユーザー定義したい場合:

char * words[wordCount];
for (i =0; i< wordCount; i++)
words[i] = malloc(sizeof(char)*User_defined_Size);
于 2013-01-24T05:06:19.260 に答える
0

2 つの添え字を使用して配列にインデックスを付けたい場合はwords[i][j]、2 つの割り当てを行う必要があります (ポインターの処理に自信がある場合は 1 つにすることもできますが、そうでない場合は 2 つの方がよいでしょう)。この質問をします)。

ポインター用に十分なスペースと、データ用に十分なスペースを割り当てる必要があります。

char **words = malloc(wordCount * sizeof(*words));
char  *data  = malloc(wordCount * MAX_WORD_LENGTH);

if (words == 0 || data == 0)
{
    free(data);
    free(words);
    ...report error?...
}

for (int i = 0; i < wordCount; i++)
    words[i] = data + (i * MAX_WORD_LENGTH);

...now you can use words[i][j] to access the jth character of the ith word...
于 2013-01-24T05:07:50.150 に答える
0

最初にこれを行う必要があります:

char *words = calloc(wordCount * MAX_WORD_LENGTH, sizeof(char));

アクセスwords[i][j] as words[i*MAX_WORD_LENGTH + j]

于 2013-01-24T05:01:51.993 に答える
0

このリンクが役立つ場合があります

ポインターは、malloc を使用して C で 2D 配列を作成するために簡単に使用できます。アイデアは、最初にポインターの 1 次元配列を作成し、次に各配列エントリに対して別の 1 次元配列を作成することです。

別の答えは、2D配列のスタックオーバーフロー 自体malloc()に存在します(ポインターツーポインターを使用)

于 2013-01-24T05:01:32.917 に答える
-1
char **words = NULL;
words = (char **)malloc(sizeof(char*) * user_defined_size_A);
for(i = 0; i < user_defined_size_A; i++) {
   words[i] = (char*) malloc(sizeof(char) * user_defined_size_B);
}

あなたはこれを試すことができます...

于 2013-01-24T05:13:13.880 に答える