扫描文件中的文字时出现问题(在C中)

时间:2016-02-07 18:46:56

标签: c file-io

我目前正在尝试编写一个从字典文件中扫描单词的函数。它在调试器中完美运行,但是当我正常编译并运行它时,它会在扫描完五个字后崩溃。这是我的代码:

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

我不确定为什么会发生这种情况。请帮忙。

1 个答案:

答案 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-&+/] 是否有效。