2016-11-28 4 views
0

Wenn ich versuche, eine Textdatei zu analysieren und dann nur den Inhalt in einer einfach verknüpften Liste zu drucken, wird jeder Wert aus irgendeinem Grund durch den zweitletzten Wert überschrieben. Zum Beispiel, wenn die Liste istWarum ersetzt dies die Anfangswerte?

ein

b

c

d

der Code wird diese richtigen Linien innerhalb der while-Schleife drucken, aber dann, wenn ich versuche, drucke die heads string am ende des codes Der code druckt nur d für den head und den heads next value.

char buf[1024]; 
    printf("Enter the file name: "); 
    fgets(buf, 1024, stdin); 

    char *file_name = strtok(buf, "\n"); 
    FILE *fp; 
    fp = fopen(file_name2, "r"); 


    char *throwaway = fgets(buf, 1024, fp); 

    struct bit_t *tail; 
    struct bit_t *head; 
    head = create_node(throwaway); 
    printf("%s\n", head->pos1); 
    int count; 
    count = 0; 
    //issue is that it is just overwriting the old results 
    while((fgets(buf, 1024, fp)) != NULL) { 

      printf("String : %s\n", buf); 
      tail = insert_tail(head, create_node(buf)); 

      printf("%s\n", tail->pos1); 
    } 
    printf("Results : \n"); 
    printf("%s\n", head->pos1); 
    printf("%s\n", head->next->pos1); 

struct bit_t *create_node(char *pos1) 

{ 
     struct bit_t *r; 
     struct bit_t *current; 

    r = malloc(sizeof(struct bit_t)); 
    if(!r) { 
      exit(1); 
    } 
    r->next = NULL; 
    r->pos1 = pos1; 
    current = r; 

    return current; 

} 

struct bit_t *insert_head(struct bit_t *head, struct bit_t *node) 
{ 
     node->next = head; 
     head = node; 
     return node; 
} 
struct bit_t *insert_tail(struct bit_t *head, struct bit_t *node) 
{ 
     struct bit_t *current; 
     current = head; 
     while(current->next != NULL) { 
       current = current->next; 
     } 
     current->next = node; 

     return node;; 
} 

Die Struktur verwendet beginnen ist

struct bit_t { 
    char *pos1; 

    struct bit_t *next; 
}; 

Antwort

0

Jedes Element in der Liste verweist auf buf aber jede Iteration durch Ihre Schleife überschreibt den Inhalt der buf. Um das Problem zu lösen, muss jedes Element Speicherplatz für den Inhalt von buf zuweisen und dann den Wert buf kopieren.