2015-04-19 2 views
1

Я новичок в программировании на С и хочу писать элементы из корзины. файл в динамически распределенную массив. Проблема в том, что я не знаю, сколько элементов (1 элемент является определяемой пользователем структурой) этот файл имеет, поэтому я не знаю, как выделить arry для размещения этих элементов из файла.Получение числа элементов в файле

Я не знаю, хорошо ли я объяснил, у меня есть файл «students.txt» (я все еще хочу использовать его как двоичный), и он состоит из N студентов. Теперь я хочу, чтобы читать учеников в выделенном динамическом массиве. Проблема в том, что я не знаю, как найти количество студентов в файле, чтобы выделить память в массиве для этого числа студентов.

так есть функция, которая возвращает количество элементов sertian типа из файла?

Я знаю, что

int fread(void *array, int size, int count, FILE *dat); 

возвращает число элементов, но я также необходимо указать массив, в котором файлы будут написаны и я не имею, что массив выделяется еще. Извините, если я сделал это слишком сложно, надеюсь, вы понимаете мою проблему и сожалеете об этом. это не мой родной язык.

Определение struct:

typedef struct 
{ 
    char indeks[8]; 
    char ime[21]; 
    char prezime[21]; 
    double prosjek; 
} STUDENT; 
+0

Для ситуаций, подобных этому, вам необязательно знать количество элементов перед рукой. Общий подход заключается в использовании динамического распределения памяти ('malloc' и/или' realloc'). Чтобы вы могли наращивать свой массив по мере необходимости (или использовать что-то вроде связанного списка - в зависимости от ваших требований). – kaylum

+0

Пожалуйста, укажите определение * student *. –

+2

Если вам действительно нужно знать количество элементов, а структуры - фиксированный размер, в файле больше ничего нет, и вы доверяете целостности файла, тогда вы можете получить размер файла и разделить его по размеру структуры (двоичного). – kaylum

ответ

2

Предполагая, что вы не будете иметь проблемы чтения структуры (например, вы сохранили структуру, которая содержала int с 4 байта размера и попытаться прочитать на машине, где int отличается размер, и т. д.) - просто получите размер файла в байтах - и разделите размер структуры.

+0

очень простое решение, спасибо! –

+1

@NebojsaTosic В случае, если вы забыли: вы можете определить размер структуры с помощью оператора 'sizeof'. – fuz

+0

Да, я знаю, я сделал это двумя разными способами, спасибо всем. –

Смежные вопросы