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 回答