假設我們有文件,其中包含:如何從文件中獲取int和string並將其保存在結構中?
1 John
2 Alex
3 Michael
我們可以通過fscanf()
功能得到一條線,但如何將其保存到以下結構:
typedef struct entry {
int n;
char *name;
} entry_t;
我想創建數組結構並將文件中的值保存到它,並動態執行。我試過這樣做
entry_t *prt = malloc (size * sizof(entry_t));
//opening file
prt[0].name = malloc (sizeof("John"));
fscanf (fp,"%d %s", prt[0].n, prt[0].name);
好吧,它的工作原理,但如何在從文本文件獲取它之前分配內存爲每個名稱? 我決定使用結構數組,因爲我會用它來實現散列表。
您不能分配_before_,因爲您不知道大小。 'strlen'你的每個名字都來自文件然後'malloc' – mihai
你至少有兩個選擇。 (1)大多數可移植的:'char buffer [1024]; if(fscanf(fp,「%d%1023s」,&prt [0] .n,buffer)== 2){prt [0] .name = strdup(buffer); ...檢查strdup後使用值工作...}其他{...處理錯誤...}'它使用一個大緩衝區來讀取值,然後分配內存;或者(2)使用['fscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fscanf.html)的POSIX特性:'if(fscanf(fp,「%d%ms」 ,&prt.n,&prt [0] .name)== 2){...使用值讀取...} else {...處理錯誤...}'。請注意第一次通話的大小限制。 –
對'fscanf()'的調用不應該編譯 - 你省略了文件指針參數。 –