2014-02-12 92 views
0

所以起初我創建我的結構:在C中寫入和讀取結構?

struct interest * p = malloc(256);在結構裏面

並分配變量:我運行結束我的輸出文件

p -> num = 1; 
    p -> size = 2; 
    p -> name = "jacky"; 

後,我寫這個結構給它:

fwrite(&p,sizeof(p), 1, output_file); 

這裏是我的第一個問題,如果我想寫一個struct p,是否把它當作「& p」是正確的?

假設我已經成功地寫了它,我想知道從我的output_file讀取結構。 我然後進行:

...#open the outputfile for reading 

結構興趣*拋光輪= malloc的(256);

fread(& buff,sizeof(buff),1,output_file);

然後我得到一個segamentation錯誤,當我嘗試打印愛好者的NUM或大小..

什麼 是這樣做的正確方法是什麼?

我要打印它的原因是因爲我想檢查一下,如果我真的已經將結構寫入輸出文件。

謝謝。

+0

你可以發佈一個最小化的程序來重現你的錯誤,而不僅僅是幾行代碼? – Bert

回答

0

錯誤1)

你不能做:

p -> name = "jacky" 

用途:

strcpy(p->name, "jacky"); 

代替。

錯誤2)

結構具有固定的lenght,你是把它分配256字節?也許你想要的是:

struct interest *p =malloc(sizeof(struct interest)); 

錯誤3)

用途:

fwrite(p,sizeof(struct interest), 1, output_file); 

p是已經指針

安置自己的struct聲明。你可能會遇到更多問題。

+0

謝謝!如果名稱本身就是一個指針呢?我想讓名字指向「jacky」? – Pig

+0

@LesbianSquirtle在這種情況下,它會是正確的。 – Fernando

+0

如果name是一個指針本身,使用:strcpy(name,「jacky」); – Abend

0

首先,你應該讓

p = malloc(sizeof(struct interest)) 

其次,pbuff已經指針,你應該寫:

fwite(p, sizeof(struct interest), fp) 
fread(buff, sizeof(struct interest), fp) 

Finnally,複製字符串,你應該寫

<string.h> 
strncpy(p->name, "jacky", sizeof(p->name)) 
+0

謝謝!對於第一個,我應該聲明p爲「struct packet * p;」第一?另外,如果名稱本身就是一個指針呢?我想讓名字指向「jacky」? – Pig