[DRINGEND] Problem mit Rückgabe eines Strings über return
-
Hi,
ich habe folgendest Problem, in Zeile 28-31 findet ein aufruf für Funktionen stat, in den Funktionen eingabe() und eingabe2() soll ein String an den Aufrufspunkt per return zurückgegebenen werden.
Leider scheint dabei etwas nicht ganz korrekt abzulaufen. Der später in Zeile 42 ausgegebene Stringwert, wird aber leider in ASCII Zeichen völlig unleserlich ausgegeben !!! HILFE !!!#include <string.h> #include <stdio.h> #include <stdlib.h> char* eingabe (); char* eingabe2 (); float eingabe3 (); typedef struct p_tag { char name [30]; char vorname [30]; float zensur ; struct p_tag *next; } student; student *new_elem (char* , char* , float); int main () { student *root_p , *stud_p; // char name[20]; // char vname[20]; // float zens; root_p = new_elem (eingabe(), eingabe2(), eingabe3()); stud_p = root_p->next = new_elem (eingabe(), eingabe2(), eingabe3()); stud_p = stud_p->next = new_elem (eingabe(), eingabe2(), eingabe3()); stud_p = stud_p->next = new_elem (eingabe(), eingabe2(), eingabe3()); // root_p = new_elem ("Korn ", "Klara ", 1.7f); // stud_p = root_p->next = new_elem ("Cron ", "Maria ", 2.7f); // stud_p = stud_p->next = new_elem ("Walker", "Johnny", 1.3f); // stud_p = stud_p->next = new_elem ("Beam ", "Jim ", 2.0f); stud_p = root_p; while (stud_p != NULL) { printf ("%25s, %25s\t%.1f\n", stud_p->name, stud_p->vorname, stud_p->zensur); stud_p = stud_p->next; } stud_p = root_p; while (stud_p != NULL) { root_p = stud_p->next; free (stud_p); stud_p = root_p; } fflush(stdin); getchar(); return 0 ; } student *new_elem (char *name , char *vorname , float zens) { student *stud_p; if ((stud_p = (student *) malloc (sizeof (student))) == NULL) { puts ("Fehler beim Allokieren von Speicherplatz"); exit (1); } strcpy (stud_p->name , name); strcpy (stud_p->vorname , vorname); stud_p->zensur = zens; stud_p->next = NULL; return stud_p; } char* eingabe() { char txt[21]; system ("cls"); printf ("Bitte Namen eingeben: "); fflush (stdin); gets (txt); // scanf ("%20s", txt); // strcat (txt, '\0'); return txt; } char* eingabe2() { char txt[21]; system ("cls"); printf ("Bitte Vornamen eingeben: "); fflush (stdin); gets (txt); // scanf ("%20s", txt); // strcat (txt, '\0'); return txt; } float eingabe3() { float zensur; printf ("Bitte Zensur eingeben: "); scanf ("%f", &zensur); return zensur; }
-
Tja, das liegt daran, dass du in deinen eingabe-Funktionen lokale C-Strings erstellst, die am Ende der Funktion zerstört werden. Und der char * Zeiger, den du darauf zurückgibst, der zeigt dann natürlich ins Nirvana.
Folgende Möglichkeiten fallen mir ein:
1. std::string benutzen
2. Speicher mit new allokieren und delete wieder freigeben (am Ende von main).MfG
GPC
-
`
`
-
Verschieben ins C-Forum @Moderatoren.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Also aus der Ausgabe lässt sich ja schon mal schließen das der Wert den du gerne in name[30] usw. hättest nicht dort landet...
Ich vermute den Fehler in den Zeilen 71 - 75... Aber mich freut die Sucherei nicht mehr...