所以我需要扫描单词字典,最大长度为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
}
}
我迷失了什么是错的。任何帮助将不胜感激。
答案 0 :(得分: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()
不返回NULL
,fscanf()
返回预期分配的数量。)