aus char array verketteten zeiger erstellen

C

codefritz

Grünschnabel
gegeben:
char **array;
char *string;

array ist initialisiert, mit Speicher allokiert und enthaelt verschieden lange Strings.

Nun moechte ich alle strings aus array dem Zeigr string zuweisen als eine zusammenhaengende Zeichenkette (mit evlt einem Leerzeichen alls Trennzeichen zwschen den einzelnen Strings).
In array werden die einzelnen String ja nacheinander im Speicher abgelegt.
Das heisst es muss auch kein neur Speicher alloziert werden fuer string, moechte ihn nur ausrichten. Und nicht strcpy oder aehnliches verwenden.

Danke
 
Ich hoffe ich habe die Frage richtig verstanden...
Ja, du brauchst keinen neuen Speicher zu reservieren.

bsp.:
Code:
for(int i=0; i<MAX; i++)
{
 string = array[i];
 printf("%s ",string);
}

Wenn du allerdings eine Kopie eines strings "in" string speichern möchtest, musst du speicher reservieren:
Code:
for(int i=0; i<MAX; i++)
{
 string = (char*)malloc(strlen(array[i]) + 1); //+1 für das leerzeichen
 strcpy(string, array[i]);
 strcat(string, " ");
 free(string);
}

willst du alle strings zusammen "in" string Kopieren, musst du für string natürlich soviel speicher wie für array reservieren, plus den ganzen leerzeichen dazwischen
 
hm ok,dachte eig so.

Code:
char **array;
//bereits vorinitalisiert, Bsp:
char **array = {"string1", "string2", "string3"};

char *stringkette=NULL;
//dieser zeiger ist nicht vorinitialisiert und zeigt noch ins Nirgendwo
//nun soll dieser so ausgerichtet werden, dass er auf die strings aus array als eine //zusmmenhaenge zeichenkette zeigt.
//also irgedwie so
for(i=0; i<3; i++){
stringkette = array[i];
stringkette = stringkette + strlen(array[i]) * sizeof(char)			
}
//anschliessend sollte bei einem
printf("%s", stringkette");
// das rauskommen als ein zusmmenhaengender string:  string1 string2 string3
// ein noch beliebiges Trennzeichen waer schoen, zB. ;

Hoffe das war verstaendlich.

thx
 
Jo, wie gesagt, gesammtlänge aller strings in array ermitteln.
Entsprechend viel speicher reservieren,
und die Dinger der reihe nach in stringkette kopieren...

Du kannst mit stringkette nur auf einen String zeigen, und beim '\0' ist dann ende.

Man könnte das '\0' durch ein leerzeichen ersetzten, aber sowas schon der Gedanke ist nicht zu empfehlen :)
 
In array werden die einzelnen String ja nacheinander im Speicher abgelegt.
In dem Array werden Pointer nacheinander abgelegt.
Die eigentlichen Strings können dabei vollkommen beliebig im Speicher verteilt sein.

Ich denke, ohne zu kopieren, wird das nicht so allgemein gültig funktionieren.
 
Zurück
Oben