2010-09-17 90 views
1

我試圖讓一個程序逐行讀取一個文件,然後把相應的行放入一個鏈接列表中,我的問題是將該字符串添加到列表中。看看代碼,在其他測試中,你可以看到我的問題。cstring初學者的麻煩

#include<stdlib.h> 
#include<stdio.h> 

struct list_el { 
    char *ord; 
     struct list_el * next; 
}; 

typedef struct list_el item; 

int main(int argc, char *argv[]) { 
    int c; 
    item *curr, *head; 
    head = NULL; 
    FILE *fileHandle = fopen("tresmaa.txt", "r"); 

    while((c = fgetc(fileHandle)) != '\n' || c != EOF) 
     if(c == EOF) { 
      printf("\n"); 
      break; 
     } else { 
      curr = (item*)malloc(sizeof(item)); 
      curr->ord = "I cant point curr -< ord = c, how can i point the readed sentences to the value Ord?"; 
      curr->next = head; 
      head = curr; 
      putchar(c); 
     } 
    curr = head; 

    while(curr) { 
     printf("%s\n", curr->ord); 
     curr = curr->next ; 
    } 
} 
+2

除了你的問題,這段代碼正在泄漏內存!你需要釋放所有使用'malloc'分配的內存。 – 2010-09-17 11:58:17

+0

謝謝。我將免費(curr)添加到我的代碼中:D – user265767 2010-09-17 12:18:09

回答

1
curr->ord = "some string" is wrong 

,而不是你需要分配一個緩衝區,並放置在字符串中它

例如

curr->ord = malloc(strlen(yourstring) + 1); 
strcpy(curr->ord, yourstring); 

因爲

curr = (item*)malloc(sizeof(item)); 

只分配的結構包括 'ORD' 指針,但不是它指向

,看起來有點可疑的另一件事是

 curr->next = head; 
     head = curr; 

看起來更像是如果你的名字應該是「下一頁」而不是「下一個」的方式,你這樣做(LIFO)

否則想要一個「正常的」FIFO鏈表只需要一個頭部ptr和一個結束ptr,然後使用結束ptr來追加元素,同時保持頭部指向第一個列表元素。

+0

謝謝。但是這個字符串對於Java程序員來說非常混亂。 int c包含已讀取的行,並可用於printf(「%S」,c)打印行。但我不能用c in = malloc(strlen(yourstring)+1)替換yourstring;沒有退出理解cstring – user265767 2010-09-17 13:19:19

+1

int c只包含您讀取的一個字符,而不是字符串。在C中,一個字符串是一個字符數組char [] +一個保存結尾\ 0字符的位置。所以如果你想從文件中讀取一行,你通常會使用一個緩衝區:char buffer [maxlength],然後使用fgets(buffer,maxlength-1,filehandle)從文件中讀取一行到緩衝區,然後你會執行curr-> ord = malloc(maxlength)並將緩衝區複製到分配的點strcpy(curr-> ord,buffer)中。 – 2010-09-17 13:45:09

+0

好的。我想改變一些字母在節點cstring之前,我打印出改變了字母的cstring,因此我想用一個for循環將cstring複製到另一個cstring,我將執行更改。但我不能寫char tmp [300] = curr-> ord;在for循環中。 Isent curr-> ord char數組?和strcpy(新的cstring,curr-> ord)不工作。我如何將curr-> ord複製到char []? – user265767 2010-09-18 16:56:41

0

我在別人看到你的問題。 :)

您的malloc的結構是不夠的。這個malloc只創建結構內存(兩個指針)的內存,而不是內部的內存。你將不得不malloc你的char內存(ord)以及正確的字符串大小。使用strlen併爲null添加一個以確定此字符串的大小。

+0

Ye,因爲char * ord是一個指向字符串的指針,現在我明白了。你能告訴我如何malloc字符? – user265767 2010-09-17 12:12:56

0
​​

是對的!

+0

但不是我們想要的:P – user265767 2010-09-17 19:22:37