Hallo,
dank hiesiger freundlicher untersützunggelang es mit die zeiger weitgehen zu verstehen
wenn du das Thema "Zeiger" vollständig verstanden hast, bist du einen riesigen Schritt weiter auf dem Weg zur Beherrschung von C.
in der main definiere ich einen char zeiger
char *r;den übergebe ich an eine externe funktion
initArray(&r, size); //size sei int mit wertdie funktin slebst bestand aus
void initArray(char**r, int size){
*r=(char*)malloc(size+1);
}
Das passt erstmal alles gut zusammen.
ich fand kein weg auf den array als solchen innerhalb dieser initArray zuzugreifen - was reinzuschrieben war unmöglich.
Wie hast du es versucht? Mit *r[0], *r[1], *r[2] ... funktioniert es, auch strncpy(*r, originalstring, size); wäre in Ordnung.
übrigens - rauszufinden, dass speicher in 16byte schritten (auf den getesteten systemen) reserviert wird, war etwas nervig :/
Nanu? Auf welcher Plattform übst du? DOS? AFAIR bedient Windows Speicheranfragen in 1kB-Schritten. Ah, shit - malloc() geht ja erst noch durch die C-Standardbibliothek, bevor es an die zuständige Funktion des Betriebssystems durchgereicht wird. Wer weiß, was malloc() da intern noch alles zwischenspeichert und vermittelt.
Wie hast du das mit den 16 Byte herausgefunden?
die idee war, den array gegebener länge mit 0 zu füllen - calloc sollte es der beschreibung nahc tun, ich bekam aber konsequent ein leere array der länge 0 bei verwendung
*r=(char*)calloc(size+1, 1);
Wie hast du die Länge 0 festgestellt? Etwa mit strlen()? Bedenke, dass Strings in C mit einem Nullbyte beendet werden. Das erste Nullbyte markiert also das Ende des Strings, unabhängig davon, wie groß der reservierte Speicherblock ist. Wenn du also einen Bereich mit Nullbytes initialisierst, liefert strlen() immer eine Länge von 0.
Faustregel: Wenn malloc() oder seine Verwandten ein Ergebnis ungleich NULL liefern, dann hast du einen Speicherblock bekommen, der mindestens so groß ist, wie du bestellt hat. Es gibt leider keine dokumentierte Möglichkeit, die tatsächliche Größe dieses Speicherblocks abzufragen.
habe ich es missverstanden?
Vielleicht.
So long,
Martin
Die letzten Worte des Architekten:
Mir fällt da gerade was ein...