Выделение памяти под элементы структуры
Есть структура, которая должна быть считана с файла:
typedef struct config
{
char* delete_first;
char* delete_first_ten;
char* delete_last;
char* delete_last_ten;
char* delete_all;
} cnfg;
Я узнаю необходимый размер для нее и выделяю память под нее :
cnfg* var;
if ((var = (cnfg*)malloc(size)) == NULL)
{
fprintf(stdout, "Allocate error.");
return EXIT_FAILURE;
}
Далее пытаюсь считать строку из файла в первый элемент, но получаю ошибку, делаю вот так:
fgets(var->delete_first, size, file);
Функция, которая вычисляет размер, необходимый для структуры:
int file_size(FILE* file)
{
fseek(file, 0, SEEK_END); // Установка указателя на конец файла (0 смещение относительно SEEK_END).
int size = ftell(file); // Количество байт, на которое смещен указатель.
fseek(file, 0, SEEK_SET); // Возврат указателя на начало файла.
return size;
}
При компиляции вылезает исключение. В чем я не прав? Спасибо!
Ответы (1 шт):
Судя по всему, вы и записывали точно так же, так что в вашем файле просто содержатся значения каких-то указателей от предыдущего запуска.
Проще всего было бы использовать структуру с уже выделенной памятью - типа
typedef struct config
{
char delete_first[100];
char delete_first_ten[100];
char delete_last[100];
char delete_last_ten[100];
char delete_all[100];
} cnfg;
Ну, или не 100, а какие-то иные размеры... Если, конечно, речь идет о строках. Тогда такую структуру можно писать и читать с помощью fwrite/fread. Но если нет - то надо возиться с каждой строкой отдельно, выясняя ее размер, выделяя соответствующую память etc etc.