Ich habe versucht, ein Programm zu schreiben, das eine Zeichenfolge in den Anfang der verknüpften Liste einfügt, aber es gab ein kleines Problem darin. Mein Code ist folgender.Fehler beim Einfügen einer Zeichenfolge am Anfang einer verknüpften Liste
#include <stdio.h>
#include <stdlib.h>
struct node{
char* data;
struct node* next;
};
void insIni(struct node** hp, char* x){
struct node* tmp = (struct node *)malloc(sizeof(struct node));
tmp->data = x;
tmp->next = *hp;
*hp = tmp;
}
void printList(struct node* h){
struct node* tmp = h;
printf("\nList contents: \n");
while (tmp != NULL){
printf("%s, ", tmp->data);
tmp = tmp->next;
}
printf("\n");
}
int main(int argc, char const *argv[]){
struct node* head = NULL;
char word [256];
scanf("%s", word);
insIni(&head, word);
scanf("%s", word);
insIni(&head, word);
scanf("%s", word);
insIni(&head, word);
printList(head);
return 0;
}
Nachdem ich eine neue Zeichenfolge am Anfang der verknüpften Liste einfügen, werden die vorherigen Elemente auch die gleiche wie die Zeichenfolge geändert werden, die gerade insterted hat, wie kann ich den Code ändern, so dass die vorherige Elemente der verknüpften Liste bleiben gleich und nur das Element am Anfang wird hinzugefügt?
Zum Beispiel, wenn ich A B C schreibe, wird die verknüpfte Liste schließlich als C, C, C anstelle von C, B, A, gedruckt.
Es funktioniert, aber 'scanf („% s“, Wort);' in main() liest den Eingang in die gleiche Zeichen-Array jedes Mal. Du könntest 'tmp-> data = x;' in isnsIni() zu 'tmp-> data = strdup (x);' – wildplasser
Ok, diese Änderung schien mein Problem zu lösen, aber beim Kompilieren erhalte ich folgende Warnung: inkompatibel implizite Deklaration der eingebauten Funktion 'strdup'. Ist das gefährlich? Und wenn ja, wie kann ich es entfernen? –
Sie müssen # # include 'zu verwenden strdup() (HINWEIS: strdup ist * leicht * nicht-Standard) –
wildplasser