Программа, считывающая словарь в динамический массив 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]);
- }
Объяснение кода листинга программы
- В цикле for выполняется чтение словаря в динамический массив char
- Переменная j является счетчиком в цикле
- fscanf считывает слова в динамический массив, разделенные пробелами
- Результат считывания сохраняется в переменной dict[i][j]
- Значение переменной dict[i][j] выводится на экран с помощью функции printf
- Результатом работы программы будет вывод на экран трех слов из словаря
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д