2015-04-19 102 views
1

我是C編程的新手,我想從bin寫入元素。文件放入dinamically alocated陣列。問題是我不知道有多少元素(1元素是用戶定義的結構)該文件,所以我不知道如何分配arry從文件放置這些元素。獲取文件中元素的數量

我不知道如果我解釋得很好,我有一個文件「students.txt」(我仍然想用它作爲二進制文件),它由N個學生組成。 現在我想讀一個dinamicaly分配的數組學生。 問題是我不知道一種方法來查找文件中的學生數量,以便爲該數量的學生分配數組中的內存。

那麼是否有任何函數從文件返回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

請發佈*學生*的定義。 –

+2

或者,如果您確實需要知道元素的數量並且結構是固定大小,則文件中沒有其他內容,並且您信任文件的完整性,則可以獲取文件大小並按結構(二進制)大小進行劃分。 – kaylum

回答

2

假設你不會有閱讀的結構問題(例如,你救了含有int大小爲4字節的結構,儘量機,其中int是不同大小的閱讀,等等) - 只需以字節爲單位獲取文件大小 - 並根據結構的大小進行劃分。

+0

非常簡單的解決方案,謝謝! –

+1

@NebojsaTosic如果您忘記了:您可以使用'sizeof'運算符來計算結構的大小。 – fuz

+0

是的我知道,我以兩種不同的方式做到了,謝謝大家。 –