Ich habe eine verknüpfte Liste Programm geschrieben, die Datenelement als void * speichert. während ich versuche, den annd print unter Verwendung von scanf/printf-Funktionen zu speichern, erhalte ich einen Segmentierungsfehler.Speichern und Drucken Zeichenfolge in ungültigen Zeiger
Knotendefinition ->
typedef struct node {
struct node *next;
void *data;
}node;
Hauptfunktion ->
head=(node *)malloc(sizeof(node));
if (head==NULL){
printf("error in allocation of memory\n");
exit(EXIT_FAILURE);
}
tail=(node*)create(head);
Funktion erstellen ->
void *create(node *current)
{
int user_choice;
while(current){
printf("\nEnter the data:");
scanf("%s",current->data);
printf("stored at %p\n",(void*)current->data);
printf("%s",(char*)current->data);
printf("\nType '1' to continue, '0' to exit:\n");
scanf("%d",&user_choice);
if(user_choice == 1){
current->next=(node*)malloc(sizeof(node));
current=current->next;
}
else{
current->next=NULL;
}
}
return current;
}
kann jemand sagen, was ist das richtige Argument für scanf & prinf sollte ..?
Arbeits Code nach Punkten gegeben in Antworten ...
void *create(node *current)
{
node *temp;
int user_choice;
while(current){
printf("\nEnter the data:");
current->data=(char*)malloc(10*sizeof(char));
scanf("%s",current->data);
printf("stored at %p\n",(void*)current->data);
printf("%s",(char*)current->data);
printf("\nType '1' to continue, '0' to exit:\n");
scanf("%d",&user_choice);
if(user_choice == 1){
current->next=(node*)malloc(sizeof(node));
}
else{
current->next=NULL;
temp=current;
}
current=current->next;
}
return temp;
}
[Bitte sehen Sie diese Diskussion darüber, warum nicht den Rückgabewert von 'malloc()' und Familie in 'C' zu werfen.] (Http://stackoverflow.com/q/605845/2173917). –
Wenn der Benutzer 0 drückt, gibt die Funktion NULL zurück. Es gibt viele Fehler. Bitte lesen Sie ein Buch, überdenken Sie Ihren Code und kommen Sie zurück, wenn Sie Probleme haben. –
Wenn 'head' null ist und Sie die Fehlermeldung ausgeben (die zu stderr, nicht zu stdout gehen soll), sollten Sie etwas anderes tun, als mit der nächsten Zeile fortzufahren, die' head' be non-null erfordert. Ihr Programm hat ein undefiniertes Verhalten. –