1

したがって、最大長19の単語の辞書をスキャンし、メモリを動的に割り当てて辞書配列のサイズを設定する必要があります。私はこれを行う方法にこだわっています。

fscanf(ifp, "%d", &numwords); //Number of words in dictionary

char ** dictionary;


for(i = 0; i < numwords; i++){
    for(j = 0; j < 20; j++){
        dictionary[i][j] = (char *) malloc(20 * sizeof(char));
        fscanf(ifp, "%s", &dictionary[i][j]);
        //printf("%s\n", dictionary[i]); //tests that the letter is read in correctly
    }
}

何が悪いのか迷っています。どんな助けでも大歓迎です。

4

1 に答える 1

4

次のリストを保持するためにメモリを割り当てる必要がありますchar*

dictionary = malloc(sizeof(char*) * numwords);

charそして、配列を割り当てるとき:

dictionary[i] = malloc(20); /* No [j] */

sizeof(char)であることが保証されているので、引数1から省略できることに注意してください。malloc()文字列を読み取るときは、許容される最大幅を指定してバッファ オーバーランを防ぎます。

fscanf(ifp, "%19s", dictionary[i]);

内側のループの要件はありません。プログラムはファイルから読み取る必要がnumwordsあり、外側のみforが必要です。

関数からの戻り値を確認します (たとえば、返されmalloc()ず、予想される割り当ての数が返されます)。NULLfscanf()

于 2012-10-12T21:38:15.717 に答える