Ich lese aus einer Datei und versuche, sie in eine verknüpfte Liste einzufügen und dann durch die verknüpfte Liste zu gehen, um den Inhalt auszudrucken. Ich habe ein wenig Probleme, da meine Ausgabe nicht die gesamte verknüpfte Liste, sondern nur das letzte Element mehrfach druckt. Ich habe den Code unten gepostet und ich habe nur Snippets gepostet und die Fehlerüberprüfung aus Platzgründen entfernt.C Drucken einer verknüpften Liste funktioniert nicht?
typedef struct Node{
char* data;
struct Node* next;
} NODE;
NODE* head = NULL;
NODE* tail = NULL;
int main(int argc, char* argv[])
{
char buffer[1024];
FILE* fp = fopen(argv[1], "r");
while(fscanf(fp, "%1023s", buffer) == 1)
{
addNode(buffer);
}
print_linked_list(head);
return 0;
}
void print_linked_list(NODE* head)
{
NODE* ptr = head;
while(ptr != NULL)
{
printf("%s ", ptr -> data);
ptr = ptr -> next;
}
}
void addNode(char* str)
{
NODE* newNode = createNode(str);
if(head == tail && tail == NULL)
{
head = newNode;
tail = newNode;
head -> next = NULL;
tail -> next = NULL;
}
else
{
tail -> next = newNode;
tail = newNode;
tail -> next = NULL;
}
}
NODE* createNode(char* str)
{
NODE* newNode = malloc(sizeof(NODE));
newNode -> data = malloc((1 + strlen(str)) * sizeof(char));
newNode -> data = str;
newNode -> next = NULL;
return newNode;
}
Also, wenn eine Datei enthält einen Text wie „How are you“, ich meine Ausgabe gedruckt werden wie „Wie geht es Ihnen“ erwartet, aber alles, was ich bekommen ist „du du du“. Wie behebe ich das?
Ja, es aus irgendeinem Grunde funktioniert, könnte man erklären, warum das ändern funktioniert? – posixKing
@lufork Sie setzen die Daten jedes Knotens auf denselben Wert, einen Zeiger auf 'buffer'. Somit hat jeder Knoten die gleichen Daten. –
Oh danke Jungs. Aber eine kleine Frage, ich überprüfte eine andere SO-Frage und jemand erwähnte, dass strdup nicht Standard ist und daher nicht verwendet werden sollte. Wäre also im Vergleich zu straddup im Allgemeinen stärker gefördert? Danke – posixKing