In C ein unendliches Array?
das hier: char *array;
ist doch ein länge mit einer unendlichen länge, weil normalerweise macht man ja:
char array[10];
oder char array[ ] = "abcdefgehi";
wie kann ihc bei char *array die länge festlegen?
3 Antworten
Das ist keine Array, sondern nur ein Pointer in dem man die Anfangsadresse des (noch nicht existierenden) Arrays speichern kann.
Das Array erzeugt man mit
array = malloc(100) // 100 Bytes
array = new char [100]
Die zweite Variante funktioniert nur in C++
Man muss den Speicher wieder freigeben, wenn man ihn nicht mehr braucht:
free(array) // für malloc
delete [] array // für new (C++)
Das ist das gleiche. Die Variante mit dem sizeof(char) ist sogar konsequenter, denn wenn man z.B. ein Array von int-Werten braucht, muss man ja auch mit sizeof(int) multiplizieren.
Noch ein Hinweis: Wenn der Compiler bei malloc ein Problem mit den Pointertypen sieht, hilft ein Cast-Operator:
array = (char *)malloc(100)
Mit Unendlich meinst du wahrscheinlich "Dynamisch".
Ein String ist Dynamisch (also in cpp auf jeden fall);
Dynamisch heißt das er sich auf das anpasst was drinne ist.
Und um deine Frage zu beantworten:
ein char *array ist keine Variable, es it ein pointer.
da das nur ein pointer auf die anfangsadresse ist , muss es keine begrenzung geben .
du sagst quasi nur , da startet diese struktur .
du solltest ggf selber dafür sorgen das ein ende erkannt wird, z.b. wie bei strings wo das \0 dann das ende zeichen ist .
ok vielen dank, noch eine kurze frage:
was ist der unterschied zwischen
und
da ja eig ein character ein byte groß ist, müsste das ja das bezhüglich der Speichereffizienz das gleiche sein.