Probleme mit string.copy

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;
}

Danke im Voraus
Steffen

Hallo Steffen!

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:

  1. Du hängst manuell wieder die ‚\0‘ an den neuen String an (nach dem letzten reinzukopierenden Zeichen) oder
  2. 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.

Liebe Grüsse,
TheBeast

Danke,
darauf wäre ich alleine nicht gekommen. :smile:

viele Grüße
Steffen