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

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

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

Здравствуйте! Я пишу словарь и работаю над функцией, которая подсчитывает количество строк в файле в переменную counter, затем создает динамический массив размера counter*3 и считывает в него файл. Сейчас для теста прошу программу вывести мне словарик (он пока маленький) на экран. Когда я её запускаю, она собирается (MSVS2015), запускается, благополучно выводит словарик на экран (то есть, все, что надо, считалось в наш чудесный массив), а потом внезапно прекращает работу из-за неизвестной ошибки. Когда запускаю отладчик, он мне говорит: "Необработанное исключение по адресу 0x0FFC3F7D (ucrtbased.dll) в anotherone.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFCD. Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно." Код:
Листинг программы
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #pragma warning(disable:4996)
  6. void main()
  7. {
  8. FILE* in = fopen("dictionary.txt", "r+");
  9. size_t counter = 0;
  10. int just, pre = EOF;
  11. while ((just = fgetc(in)) != EOF)
  12. {
  13. pre = just;
  14. if (just == '\n')
  15. ++counter;
  16. putchar(just);
  17. }
  18. if (pre != '\n')
  19. {
  20. ++counter;
  21. }
  22. char **dict;
  23. dict = new char*[counter];
  24. for (int i = 0; i < counter; i++)
  25. dict[i] = new char[3];
  26. for (int i = 0; i < counter; i++)
  27. {
  28. for (int j = 0; j < 3; j++)
  29. {
  30. fscanf(in, "%s ", &dict[i][j]);
  31. printf("%s", dict[i][j]);
  32. }
  33. }
  34. _getch();
  35. }
Возможно, вы подскажете, где спряталась ошибка? Заранее спасибо!

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

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

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы