Программа, считывающая словарь в динамический массив char, прерывает работу - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Я пишу словарь и работаю над функцией, которая подсчитывает количество строк в файле в переменную counter, затем создает динамический массив размера counter*3 и считывает в него файл. Сейчас для теста прошу программу вывести мне словарик (он пока маленький) на экран. Когда я её запускаю, она собирается (MSVS2015), запускается, благополучно выводит словарик на экран (то есть, все, что надо, считалось в наш чудесный массив), а потом внезапно прекращает работу из-за неизвестной ошибки. Когда запускаю отладчик, он мне говорит: "Необработанное исключение по адресу 0x0FFC3F7D (ucrtbased.dll) в anotherone.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFCD. Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно." Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#pragma warning(disable:4996)
void main()
{
    FILE* in = fopen("dictionary.txt", "r+");
 
    size_t counter = 0;
    int just, pre = EOF; 
    
    while ((just = fgetc(in)) != EOF)
    {
        pre = just;
 
        if (just == '\n')
            ++counter;
 
        putchar(just);
    }
    if (pre != '\n')
    {
        ++counter; 
    }
    char **dict;
    dict = new char*[counter];
    for (int i = 0; i < counter; i++)
        dict[i] = new char[3];
    for (int i = 0; i < counter; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            fscanf(in, "%s ", &dict[i][j]);
            printf("%s", dict[i][j]);
        }
    }
    _getch();
}
Возможно, вы подскажете, где спряталась ошибка? Заранее спасибо!

Решение задачи: «Программа, считывающая словарь в динамический массив char, прерывает работу»

textual
Листинг программы
for (int j = 0; j < 3; j++)
{
  fscanf(in, "%s ", &dict[i][j]);
  printf("%s", dict[i][j]);
}

Объяснение кода листинга программы

  1. В цикле for выполняется чтение словаря в динамический массив char
  2. Переменная j является счетчиком в цикле
  3. fscanf считывает слова в динамический массив, разделенные пробелами
  4. Результат считывания сохраняется в переменной dict[i][j]
  5. Значение переменной dict[i][j] выводится на экран с помощью функции printf
  6. Результатом работы программы будет вывод на экран трех слов из словаря

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы