C语言 - >从段落中分离单词

时间:2017-11-24 13:09:14

标签: c arrays dynamic realloc strtok

我的函数save_words接收armazena和size。 Armazena是一个包含段落的动态数组,大小与数组的大小相同。在这个函数中,我想在其他称为单词的动态数组中逐字逐句。当我运行它时,它会崩溃。 我感谢您的帮助。

char **save_words(char **armazena, int *size)
{
    char *token = NULL;
    char** armazena_aux = armazena;
    int i, count=0;
    char **words = (char**) malloc(sizeof(char*)*(10));
    for(i=0; i<size; i++)
    {
        token = strtok(*(armazena+i)," .?!,");
        while( token != NULL )
        {
            int tam = strlen(token);
            armazena[count] = (char*) malloc(tam+2);
            strcpy(armazena[count],token);
            armazena[count][tam+1]='\0';
            count++;
            token = strtok(NULL, " .?!,");

            if (count%10==0)
            {
                words = realloc(words, sizeof(char*)*(count + 10));
            }
        }
    }
    return words;
}

1 个答案:

答案 0 :(得分:0)

armazena[count] = (char*) malloc(tam+2);你想要的是什么?我原以为words[count] = ...;。第一次通过外循环是好的,因为你将armazena [0]提升到strtok,但如果它包含多个单词,你第二次通过外循环将处理第一次生成的字符串。 更糟糕的是,如果第一个字符串包含的字数超过了armazena矢量可以容纳的字数,那么你将会腐败一些......