Создание функции

Вот как исправил все равно не работает

int main(void)
{
    char** words = NULL; // указатель на слова
    int num_words = 0; // кол во слов
    char* delim = " \t\n,.!?:";
    int size_file = 0; //размер файла
    FILE* fp = fopen("test.txt", "r");
    fseek(fp, 0, SEEK_END);
    size_file = ftell(fp); //находим размер файла
    printf("%d\n", size_file);
    char* buffer = calloc(size_file + 1, sizeof(char)); //буфер

    if (buffer == NULL) {
        printf("Ошибка выделения памяти\n");
        exit(-1);
    }

    fseek(fp, 0, SEEK_SET);
    fread(buffer, 1, size_file, fp);

    printf("\nТекст файла\n\n");
    printf("%s\n", buffer);

    char* istr = strtok(buffer, delim);   
   words = file_words(buffer, words, &num_words, delim);


    printf("Количество символов в файле :%d\n", size_file);
    printf("Количество слов в файле :%d\n\n", num_words);
    for (int i = 0; i < num_words; i++) {
       // puts(words[i]);
    }

Вот как пытался реализовать функцию отдельно:

    char** file_words(char *f_istr, char **word, int *n_word, char *del) {
  while (f_istr) {
        word = realloc(word, (*n_word + 1) * sizeof(char*));
        word[*n_word++] = f_istr;
        f_istr = strtok(NULL, del);
    }
 return word;
}

Но с ней программа перестает работать(ошибок нет, просто перестает считывать слова


Ответы (1 шт):

Автор решения: DSuhoi

В функции был не полностью реализован алгоритм по работе с текстом.

char** file_words(char *buffer, char **word, int *n_word, char *del)
{
    char* f_istr = strtok(buffer, del);

    while (f_istr) {
        word = realloc(word, ((*n_word) + 1) * sizeof(char*));
        word[(*n_word)++] = f_istr;
        f_istr = strtok(NULL, del);
    }
    return word;
}

Эта функция заменяет данный участок кода:

    printf("\nТекст файла\n\n");
    printf("%s\n", buffer);

    words = file_words(buffer, words, &num_words, delim);

    /*
    //char* istr = strtok(buffer, delim);
    //пытался перенести эту функцию
     while (istr) {
        words = realloc(words, (num_words + 1) * sizeof(char*));
        words[num_words++] = istr;
        istr = strtok(NULL, delim);
    }
    */
→ Ссылка