# An ein char*-string neue Zeichen anfügen ?



## kscha (23. September 2003)

Hallo liebe Leute !

Ich habe da folgendes Problem (wahrscheinlich ist es mal wieder völlig banal !):

Ich habe einen char*-string und möchte an diesen während der Laufzeit noch weitere Zeichen anfügen. Diese neuen Zeichen kommen von einem Funktionsaufruf. Es soll dann auch wieder ein char* vorliegen. Wie kann ich das machen ?

Am liebsten würde ich ja von vornherein einen ganz normalen string verwenden, an den man einfach Zeichen hinten dran hängen kann. Aber die Variable, die ich zusammen baue, wird später in Sourcecode verwendet, der nicht von mir stammt und den ich auch nicht ändern kann.... also: char* 

Ich hoffe, daß ich mich verständlich ausgedrückt habe ! Wenn nicht, dann sagt bescheid ! Kann mir jemand weiterhelfen ?

Vielen Dank im Voraus 

Gruß, Kai


----------



## Saber (23. September 2003)

Benutz doch eine CString und konvertiere ihn anschl. in einen Char-Pointer.


----------



## chibisuke (23. September 2003)

NEIN! keinen CString, weil es sonst probleme mit der kompatiblität gibt... 
man sollte die MFCs nich mit dem API mischen...

wenn schon unbedingt String dann benutz die STL...(Standart Template Library)

#include <string>

und dann

std::string myString;

das funktioniert jetzt so ähnlich die MFCs auch nur mit dem unterschied das es zum API gehöhrt...

aber wenn du das selbst amchen willst ists auch net schwer...

2 zeichenketten... jeweils nullterminiert, über char* angesprochen
zuerst stellt man sicher das in der einen die das ergebnis beinhalten soll genug platz ist...

char *kette1, *kette2;
kette1 = _strdup("Hello ");
kette2 = _strdup("World!");

so angenommen du willst nun die variable kette2 an die variable kette 1 anhängen..

zuerst musst du genug platz schaffen:
kette1 = realloc(kette1, _msize(kette1) + strlen(kette2));

und nun kopierst du kette2 an kette1 dran

strcat(kette1, kette2);

so wenn du nun 
printf(kette2); machst schreibt er
Hello World!


```
char *kette1, *kette2;
kette1 = _strdup("Hello ");
kette2 = _strdup("World!"); //zeichenketten allozieren und mit werten füllen

kette1 = realloc(kette1, _msize(kette1) + strlen(kette2)); //platz machen
strcat(kette1, kette2); //anhängen
printf(kette2); //ausgeben
```

an headern brauchst du malloc.h und string.h


----------



## Matthias Reitinger (24. September 2003)

[OT]
Irre ich mich oder gehört die STL nicht eher zu den (Quasi-)Standardbibliotheken anstatt zur irgendeiner API?
[/OT]


----------



## Saber (24. September 2003)

STL = Standard Template Library


----------



## chibisuke (24. September 2003)

STL ist eigendlich keine bibliothek im herkömmlichen sinne, da sie mit templates geschrieben wurde, das heißt also das du dabei nicht spezielle datentypen benutzen musst sondern es im endeffekt egal is was es is... und dazu gehöhren tut die eigendlich gar nirgends so richtig..das is ne eigene gruppe, die Template Librarys,... aber entwickelt wurde die für den einsatz mit diversen apis, hauptsächnlich jedoch im zusammenspiel mit der libc..

achso was ich vergessen hab zu erwähnen.. ein einem std::string bekommst du einen char* indem du die methode cstr() aufrufst...


----------

