Wie kann man einen String leeren?



  • Hallo,

    ist vieleicht wieder eine dumme Fragen, aber ich benutze einen temporaeren String, der dann nocheinmal verwendet wird! Aber wie es aussieht sind da noch Reste des vorherigen Inhalts drin und das Ergebniss nicht wirklich brauchbar.
    Weiss jemand, wie ich alle Zeichen aus dem String entfernen kann?

    Ueberlebenskuenstler



  • std::string test = "Hallo, Welt!";
    test = "Ich werde demnaechst geloescht!";
    test = "";
    

    Oder was für eine Art von string meinst du?

    Für C-strings kannst Du strcpy() verwenden...
    edit: Bzw. bei char[]s kannst Du dem Element[0] einfach ein '\0' zuweisen...

    [ Dieser Beitrag wurde am 28.01.2003 um 13:00 Uhr von nman editiert. ]



  • edit: Doppelpost...

    [ Dieser Beitrag wurde am 28.01.2003 um 12:59 Uhr von nman editiert. ]



  • strcpy dafür ist ein bissel heftig 😉 ggf. kann memset wichtig sein

    memset(buffer,0,buffer_size);



  • Warum willst du den String löschen? Normalerweise ist das unnötig, es sei denn, du willst geheime Daten überschreiben (z.b. den Puffer für ein Passwort).
    Wenn dein String "unbrauchbar" ist, machst du irgendwas anderes falsch (z.b. keine Nullterminierung)



  • Hallo,

    das mit dem 0 zuweisen hab ich schon probiert, aber das geht nicht, dann ist nur der string nicht mehr zu verwenden!
    Erst wird in den String eine Zeile eingelesen, bzw, ein Teil einer Zeile. Das macht er Zeile fuer Zeile bis die Datei zu Ende ist.
    Jetzt habe ich aber das Problem, dass er die Reste drin laesst, deshalb bekomme ich dann eine Ausgabe wie:

    Aktuelles Datum: 28.01.2003
    Aktuelle ZeitⓂ 16:10:12

    Eigentlich soll aber dann

    Aktuelles Datum: 28.01.2003
    Aktuelle Zeit: 16:10:12

    rauskommen. Und jetzt muss ich irgendwie das m: aus der 1. Zeile rauskriegen!

    Ueberlebenskuenstler



  • wie füllst du denn den string auf? dabei machst du irgend etwas falsch



  • Du hast keine Nullterminierung.



  • ich hatte mal ein aehnliches problem.
    ich hab den string ( in meinem falle char[1024] )
    in einer for-schleife gefuellt, d.h. jedes zeichen
    einzeln. und das ganze nicht nur einmal! ich wollte
    damit glaube ich aus einem anderen string einen teil
    "herausschneiden". das ging aber auch irgendwann schief...

    falls also die obigen vorschlaege nicht helfen: hier meine
    loesung:

    char *buffer;
    char mystr[ 1024 ];
    
    for( ... )
    {
      buffer = new char[1024];
      .
      . // irgendeine operation
      .
    }
    strncpy( mystr, buffer, sizeof( mystr ) );  // wir wollen ja noch damit arbeiten
    delete buffer;
    
    // neuer aufruf
    
    for( ... )
    {
      buffer = new char[1024];
      .
      .
    }
    strncpy( mystr, buffer, sizeof( mystr ) );
    delete buffer;
    

    naja, und so weiter. iss vielleicht ein bissl umstaendlich?! 😉
    ich hoffe das stimmt auch so... 😉
    bei mir hat es jedenfalls mal so, oder so aehnlich, geklappt!

    ciao

    ps: ich hatte auch keine nullterminierung... 😃

    [ Dieser Beitrag wurde am 28.01.2003 um 16:53 Uhr von cypoc editiert. ]



  • Ok, danke fuer die ganzen Hinweise, werd ich dann gleich mal ausprobieren!
    Nur noch eine Frage: Was ist ein nullterminierung?

    Ueberlebenskuenstler



  • Strings liegen ja etwas so in dem Speicher

    0    | 1   | 2   | 3   | 4   |
    H    | a   | l   | l   | o   |
    

    da man nun die Länge des Strings nicht weiss, wenn man sie nicht explizit speichert, haben Strings ein \0 am Ende, dieses \0 am Ende wird automatisch bei "hallo" angefügt ("hallo" entspricht also 'h' 'a' 'l' 'l' 'o' '\0'), diese 0 wird von den Standard Funktionen idr. erwartet, deswegen sollte man Strings immer mit 0 "terminieren" 🙂

    (gehört übrigend zu jedem C(++) Grundlagen Wissen)



  • Original erstellt von kingruedi:
    strcpy dafür ist ein bissel heftig 😉

    *g* Ich meinte ja auch nicht zum Löschen, aber wozu muss man einen 0815-String löschen bevor man was drüberkopiert?
    Wenn man einfach strcpy() verwendet MUSS man vorher nichts löschen, das war was ich sagen wollte.


Anmelden zum Antworten