scanf rückgabewert bei strings
-
Sei mal froh, dass
scanf()
nur die 0 zurückgibt und nicht abstürzt.
An der Stelle NULL liegt garantiert kein gültiger Speicher, an demscanf()
deine Eingabe ablegen kann.DU musst den SPeicher zur Verfügung stellen und an
scanf()
übergeben.
Siehe auch: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
-
wie stell ich den speicher zur verfügung ?
-
Z.B. indem du eben ein entsprechend großes Array auf dem Stack oder mit malloc() auf dem Heap anlegst...
-
In dem du an deine Funktion den Speicher übergibst:
char *eingabe_string(char *string, char *aufforderung) { ... }
-
in der main würde es dann so hier aussehen oder wie?
char *string [10]; wort = eingabe_string(string, aufforderung);
-
essential schrieb:
char *string [10];
Versuchs noch einmal:
http://cdecl.ridiculousfish.com/?q=char+*string+[10]%3B+
-
Nein.
Ein char *string [10]; ist ein Array aus 10 Zeigern auf char.
Du brauchst aber nur ein einfaches Array von char.
Außerdem zeigt der Rückgabewert von eingabe_string ja schon auf string.char string[10]; // wenn das in wort gespeichert werden soll. eingabe_string(string, aufforderung);
oder auch
char wort[100]; // wenn 9 Zeichen reichen, ist das ok. eingabe_string(wort, aufforderung);
-
es funktioniert, cool danke !
geht das nur mit dem übergeben?
-
alternativ mit globalen Variablen. Dazu musst Du analog zu Deiner bisherigen Lösung die Variablendeklination außerhalb der main-Funktion bzw. generell außerhalb einer Funktion durchführen. Ist aber nicht sonderlich schön.
-
Du kannst dir mit malloc() Speicher besorgen.
Du darfst aber nicht vergessen den auch wieder freizugeben.
Speicher brauchst du eh beim einlesen. Du musst aber auch aufpassen, das dieser Speicher nicht "überläuft".
Wenn der User zuviel eingibt, wird einfach anderer Speicher überschrieben.