String einlesen
-
Hi,
um kurz zu machen; ich muss einen String einlesen und in ein Array speichern. Das array muss dynamisch erzeugt werden, da vorher nicht weiß, wie lang der String ist.
Mein Problem ist jetrzt, dass ich nicht weiß, wie ich das genau machen soll.Also ich mir überlegt die Zeichen einzeln per getchar() einzulesen und ins Array zu schreiben. Wenn ich das Array vorher erstelle, dürfte das kein Problem geben.
Für das Array kann ich ja mit malloc Speicherplatz erstellen; aber ich weiß ja vor Ende der Eingabe nicht, wieviel ich brauche. Also wie kann ich das am geschicktesten machen?
-
realloc()...
malloc(menge)
wenn das array voll wird, menge verdoppeln und realloc()
wenn das array voll wird, ...
-
also ich kenn mich mit realloc nicht aus, aber ich kann mir vorstellen, was es bewirkt. Jedoch fordert der Compiler bei mir 2 Argumente. bei malloc ist es nur 1, und ich weiß nicht, was hier das 2. ist.
Die schleife zum einlesen sieht im moment ungeföhr so aus:
char * in = ""; char c; int count = 1; while((c = getchar()) != '\n'){ in = (char*)realloc(???, sizeof(char)*(count++)); // bei jedem schleifendurchlauf ein Feld mehr in[count] = c; }
Abgesehen von dem realloc müsste es eigentlich funktioniert - denk ich mir als in C unerfahrener Programmierer zumindest
-
Der erste Parameter muss ein Pointer auf deinen Speicherbereich, sprich dein Array, sein.
#include <stdlib.h> void *realloc( void *ptr, size_t size );
Quelle: http://www.cppreference.com/
edit:
char * in = ""; char c; int count = 1; while((c = getchar()) != '\n'){ in = (char*)realloc(in, sizeof(char)*(count++)); // <--- in ist dein pointer // bei jedem schleifendurchlauf ein Feld mehr in[count] = c; }
-
dein ganzer code ist falsch! ich korrigiere mal...
int size = 10; int count = 0; char *in = malloc(size); int c; if (!in) { puts("error: malloc()"); return; } while((c = getchar()) != EOF && c != '\n') { if (count >= size-1) if (!(in = realloc(in, size *= 2)) { puts("error: realloc()"); break; } in[count] = c; in[++count] = 0; // stringterminierung } free(in); // speicher nicht freigeben ist ein fehler
-
Danke für eure Antworten. Ich habs jetzt hinbekommen - irgendwie.
Nochmals Danke