Программа, считывающая словарь в динамический массив 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
- Результатом работы программы будет вывод на экран трех слов из словаря