1樓:網友
你總共只分配了一次記憶體,當然只有乙個了。
p2=(stuinfor *)malloc(sizeof(stuinfor));
while(fread(p2,sizeof(stuinfor),1,fp1)==1)
if(head==null)
head=p1=p2;
elsep1->next=p2;
p1=p2;
p1->next=null;
p2 = stuinfor *)malloc(sizeof(stuinfor));每讀取一次,重新分配一次記憶體。
請問什麼是銷燬已存在的學生資訊連結串列?
每調一次readstuinfor(),都會建立一次學生資訊連結串列,你的連結串列是malloc動態建立的,需要用free來釋放分配的記憶體,否則就會有記憶體洩漏!
這需要記錄上次呼叫readstuinfor()返回的頭指標,要到達這個目的,stuinfor *head 需要宣告為 static;
static stuinfor *head = null;
不好意思,我考慮不周。
p2=(stuinfor *)malloc(sizeof(stuinfor));
p2->next = null; /這句要加上。
while(fread(p2,sizeof(stuinfor),1,fp1)==1)
if(head==null)
head=p1=p2;
elsep1->next=p2;
p1=p2;
放到else外面來。
p2 = stuinfor *)malloc(sizeof(stuinfor));
p2->next = null:
2樓:
你拿這個再試一次。
stuinfor *readstuinfor()file *fp1;
static stuinfor *head=null;
stuinfor *p1,*p2;
if((fp1=fopen("","r"))null)return null;
elsep2=(stuinfor *)malloc(sizeof(stuinfor));
while(fread(p2,sizeof(stuinfor),1,fp1)==1)
if(head==null)head=p1=p2; elsep1->next=p2;
p1=p2;
p2=(stuinfor *)malloc(sizeof(stuinfor));
p1->next=null;
return head;
c語言如何從檔案讀入,並存放在連結串列中
3樓:惠企百科
//舉個單連結串列的例子,首先定義連結串列成員的結構體。
struct filetext;
讀取檔案,並插入進連結串列的函式,filename為要讀取的檔名,head為連結串列的頭節點,函式返回插入新節點後連結串列的頭節點。
struct filetext * readfile(char * filename,struct filetext * head)
然後開始讀取檔案,放到new的buf中。
if(fread(new->buf,bufsize,1,fp)<1)
fclose(fp);
檔案讀取完後,進行連結串列操作。
if(!head)//如果傳進來的head是個空指標,那麼新指標就作為頭節點返回。
while(p->next) p = p->next;//把p移動到最後乙個節點。
p->next = new;//p的下乙個節點為new
new->next = null;//new的下乙個節點為空。
return head;
這樣這個函式就完成了,你可以寫個主函式,定義乙個頭節點,試下。
c語言連結串列和檔案操作
4樓:幻形術
副檔名為xls的檔案是office的excel檔案,這是一種二進位檔案。(當然不排除是一種掛羊頭賣狗肉的文字檔案,這種情況不考慮。)
你說你能寫進去,貌似看你用了fprintf寫檔案吧,沒錯,但是fprintf是寫文字檔案的,按一定格式寫的文字。你用\t作分隔輸出的檔案類似逗號分隔的csv檔案,是可以被excel識別並開啟的,沒錯。
但是,fread是讀取二進位檔案的函式,如果檔案中是純文字,你用fread去讀當然是錯的,如果檔案中是二進位,你用fread也不可能讀成你想要的結構體。如果你的xls檔案是excel的原生二進位檔案,那就更不可能是你用fread能讀出來的,得用專門的庫,如微軟官方的office com庫。
不知你明不明白二進位檔案和文字檔案的區別。
當然如果你讀的那個xls檔案就是你用fprintf寫進去的檔案,請用fscanf函式按照寫時候的格式去讀才行。自己看看fscanf函式,跟scanf類似。
關於c語言的很簡單的練習題,關於C語言的一個很簡單的練習題
scanf d,a 寫錯了 scanf d a 如何寫這個特別簡單的c語言程式,是一個小練習,習題6.2 include int main void return 0 c語言簡單練習題 第一題 賦值符號 右邊是由常量,變數,運算子,和函式組成的表示式.a,b中第一個 右邊不是一個表示式.逗號表示式形...
C語言一個簡單的問題,一個簡單c語言小問題?
問題出在這裡 int a,b a 10 b 20 你的 a,b 都沒有初始化,指向了未知的地方,也就是所謂的野指標。可以設定兩個變數x,y,將 a,b 指向這兩個變數,然後作為引數呼叫 swap 函式。另外,你的 swap 函式忘寫函式名了吧?指標一般以小寫字母 p 開頭,表示 pointer,好習...
簡單的c語言程式,一個簡單的c語言程式
很多程式都是非常簡單的 1.輸入2個正整數m和n,求其最大公約數和最小公倍數 include include int main 3.程式設計計算從1到10各數階乘的和,即1 2 3 9 10 的和 include int main void printf 1到10各數階乘的和 d n sum ret...