我目前正在尝试编写一个从字典文件中扫描单词的函数。它在调试器中完美运行,但是当我正常编译并运行它时,它会在扫描完五个字后崩溃。这是我的代码:
char** readDictionary(FILE *ifp, int size){
int i;
char** dictionary;
char buffer[21];
dictionary = malloc(sizeof(char*) * size);
if(dictionary == NULL){
printf("dictionary allocation ERROR");
return NULL;
}
for(i=0; i<size; i++){
fscanf(ifp, "%s", buffer);
printf("%s\n", buffer); //debugging statement
dictionary[i] = malloc(sizeof(char) * strlen(buffer));
strcpy(dictionary[i], buffer);
}
return dictionary;
}
在调试器中,正确扫描所有单词。当我在没有调试器的情况下运行时,我在第五个单词后崩溃。
这是我前几个单词的列表(再次,它在aardvarks之后崩溃): 惊喜的叫着 AAHS AALS 土豚 土豚 阿德沃夫 aardwolves
我不确定为什么会发生这种情况。请帮忙。
答案 0 :(得分:3)
您没有为终止 null 字节分配空间。变化
dictionary[i] = malloc(sizeof(char) * strlen(buffer));
strcpy(dictionary[i], buffer);
到
size_t length = strlen(buffer);
dictionary[i] = malloc(length + 1);
if (dictionary[i] != NULL)
memcpy(dictionary[i], buffer, length + 1);
甚至更好
dictionary[i] = strdup(buffer);
另外,如果fscanf()
没有在您的情况下返回1
,请检查^[a-z-&+/]
是否有效。