Nach dem 2. Copy sollte in teilstring eigentlich „mple“ drinstehen, doch da steht immer noch „mplettStr“ drin.
Ich versteh das nicht, ich dachte, durch das strcpy(TeilString, „“);
wird TeilString gelöscht.
Im Überwachungsfenster von Visual Studio ist es danach leer, bei der Bildschirmausgabe ist es nachher leer, aber nach dem 2. Copy, der ja statt 9 nur 4 Zeichen in TeilString reinkopieren soll stehen da wieder alle 9 drin.
# include
# include
# include
# include
using namespace std;
int main()
{
char TeilString[20] = {0};
string KomplettString;
int CopyLaenge;
int weiter;
KomplettString.assign("KomplettString");
cout \> weiter;
}
Wenn Du den Leerstring in einen char* reinschreibst, dann tut das nix anderes als den ersten Character im String auf ‚\0‘ zu setzen, alles was dahinter stand bleibt gleich. Wenn Du danach wieder was anderes reinschreibst, dann wird die führende ‚\0‘ überschrieben, dahinter steht dann das was Du reinschreibst und dahinter alles was dort vor dem Überschreiben gestanden hat, wird also bis zum nächsten ‚\0‘ als Teil Deines neuen Strings interpretiert.
Um das richtig zu machen bleiben Dir zwei Möglichkeiten:
Du hängst manuell wieder die ‚\0‘ an den neuen String an (nach dem letzten reinzukopierenden Zeichen) oder
Du setzt davor den ganzen Buffer der Einfachheit halber mittels memset auf lauter '\0’en
Ich hoffe das ist einigermassen verständlich, für Rückfragen stehe ich gerne zur Verfügung.