Dynamischer Speicher für Strings
-
Angenommen man muss ein Benutzernamen und Passwort mit c einlesen.
Der Benutzername und das Passwort soll dynamisch gespeichert werden, soll heißen es soll nur soviel Platz verwendet werden, wie benötigt wird.
Der Speicherplatz für den Benutzernamen und das PW soll ja während der Laufzeit erstellt werden:
char *s1; s1 = (char *) malloc(15);
Alles klar soweit, wenn ich jetzt jedoch eine Tastatureingabe einlesen will (scanf("%c",))
würde ich sie zunächst einmal zwischenpuffern (z.B.char temp[200]
) und dann mit
i = strlen(temp)
die länge rausfinden und dann
s1 = (char *) malloc(i);
So jetzt zum Problem: Es soll kein Zwischenpuffer verwendet werden
Wie soll das den gehen? oder mach ich das irgendwie komplett falsch?
Ich glaub mit c99 geht das schon ... aber hab in dem sinne kein c99Dank im voraus
-
Naja, da Du nicht weißt, wie groß der Name tatsächlich ist bzw. wird (und es meistens auch 'doof' ist, den Benutzer danach zu Fragen
), hast Du 2 Möglichkeiten:
1. Ohne Zwischenpuffer:
Du ließt immer ein Zeichen ein, und vergrößerst dann deinen Buffer und hängst das Zeichen dort an (realloc).
2. Mit Zwischenpuffer:
Du allokierst vorsorglich dynamisch, sagen wir 30 Zeichen (30 * sizeof(char), also 30 Bytes), und ließt den Namen dort ein, wenn er größer wird, musst Du, wie in Punkt 1, den Puffer vergrößern.Letzteres sollte aber wesentlich besser sein
.
-
Eventuell das hier durchlesen, http://www.c-plusplus.net/forum/viewtopic-var-t-is-191078.html da wurde genau sowas behandelt