String löschen, nicht ersetzen

Hi, ich hätte mal eine kurze Frage und hoffe das sie hier reinpasst. :)
In einem Programm steht vor einem beliebigen String z.B. immer "Wort: ". Wenn ich das nun ändern will, muss ich ja eigentlich nur im Code nach "Wort: " suchen und das ersetzen. Dabei muss doch soweit ich weiss aber immer die Länge gleich bleiben.
Wenn ich das nun einfach weghaben will ist es ja mit Leerzeichen nicht getan, weil dann ja der restliche Text zu weit rechts steht.
Kann ich da dann einfach 00 oder ein Nullbyte oder wie das heisst einfügen?
Ich hab gerade leider nicht die Möglichkeit es zu testen daher hoffe ich jemand kann mir das kurz beantworten. :)
 
Von welcher Programmiersprache sprichst du? C? Ohne diese Information könnst schwierig werden die Frage zu beantworten.
 
Ist 'Wort' an sich nullterminiert oder folgen darauf andere Wörter? Wo wie ich es verstanden habe: 'Wort' ist ein Anhängsel und wird zu einem beliebigen String per concat (bzw Sprachspezifische Stringconcatfunktion) hinzugefügt. Nun kommt es darauf an, wie die Funktion arbeitet - kann nämlich sein, dass sie den Dienst bei 0-String verweigert ;).
Daher bleibt eher nur ausprobieren - entweder durch Nullbyte ersetzen (reicht aus, wenn man W ersetzt - also das erste Zeichen) oder eben statt W ein Leerzeichen und dann Nullbyte.

Achso sorry, ja C oder halt eine normale exe
pascal/delphi hat z.B noch vor dem String eine Längenangabe, die angepasst werden muss ;)
 
Ja genau danke, so meinte ich es..
Ich hab es jetzt mal getestet und in dem Beispiel hat es tatsächlich einfach mit 00 geklappt :)
Code:
#include <iostream.h>

void main(){
char asd[20];
cin >> asd;
cout << "\nWort: " << asd << "\n";
}
Was mich dann aber gewundert hat war, dass ich im Editor hinter dem Leerzeichen in "Wort: " noch 5 Zeichen reinschreiben konnte, die dann korrekt angezeigt wurden. Mit einem mehr standen dann die Zeichen noch zusätzlich hinter der Eingabe.
Was hat es denn damit auf sich?

[Edit]
Ich hab mal ein Screenshot gemacht... irgendwie scheint das ja irgendwo reinzugeraten. Aber wo? Und woher weiß man sowas? :)
Achso ich benutze übrigens Visual C++
 
Ich hab mal ein Screenshot gemacht... irgendwie scheint das ja irgendwo reinzugeraten. Aber wo? Und woher weiß man sowas?
(kann ich nur vermuten, da kein MS compiler zur Hand).
Vor der Modifizierung stand hinter 'Wort: ' wohl ein 00 und 0A 00 (weitere 00)
weitere 00 sind entweder irgendwelche (globalen) Variablen oder einfach Bytepadding (Auffüllbytes für schöneres Alignment )

Jedenfalls wird ja im Originalcode zuerst was eingelesen und der Inhalt des Buffers mit "\n" (also der überschriebenen 0A ;) ) concateniert. Dabei weiß die Concat-Funktion nicht, dass es sich um "\n" handelt - es werden nur Speicheicherpositionen der zu verbindenden Strings übergeben. Wenn statt 0A etwas anderes an dieser Stelle steht, wird es auch stattdessen genutzt. Dass der erste String und der zweite sich speichermäßig überschneiden stellt kein Problem dar, weil die Funktion eher nur nach 00 Byte ausschau hält und stumpf zuerst Bytes von der zuerst angegebenen Position bis 00 und dann von der zweiten Position bis 00 in einen neuen Buffer kopiert.
 
Danke erstmal =)
Also wenn ich jetzt "Wort: " durch sagen wir mal "WortWortWort: " ersetzen will muss ich herausfinden oder wissen an welcher Stelle die Länge des Strings "Wort: " steht und diese anpassen?
Und dann warscheinlich sicherheitshalber auch gleich auf ein 2^n angepasst oder?
 
Also wenn ich jetzt "Wort: " durch sagen wir mal "WortWortWort: " ersetzen will muss ich herausfinden oder wissen an welcher Stelle die Länge des Strings "Wort: " steht und diese anpassen?
Nee, nur bei Pascal/Delphi - bei C Konsorten ist der String nur 00 terminiert. Der Post bezog sich darauf, warum die Eingabe dann in den Wort-String "eingefügt" wird ;)
 
Zurück
Oben