mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String loeschen


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein

char Buffer[120];


diesen schreibe ich einmal ganz voll (120) zeichen.
und beim zweiten mal nur bis zu haelfte. (60)

jetzt ist der aber gemischt, die ersten 60 zeichen sind die
neuen und die zweiten 60 zeichen sind die alten.

gibt es eine moeglichkeit das wieder zurueck zu setzen
das Buffer nur noch 60 zeichen lang ist und die letzten 60 leer sind
als ob ich nur 60 zeichen in buffer geschrieben haette?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Buffer[60] = 0;

Autor: Markus F. (pippo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schöner ist es so:

Buffer[60]='/0'

Somit ist offensichtlich, dass hier ein Ende des Strings markiert wird.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon schrieb:
> Hallo,
>
> ich habe ein
>
> char Buffer[120];
>
>
> diesen schreibe ich einmal ganz voll (120) zeichen.
> und beim zweiten mal nur bis zu haelfte. (60)
>
> jetzt ist der aber gemischt, die ersten 60 zeichen sind die
> neuen und die zweiten 60 zeichen sind die alten.
>
> gibt es eine moeglichkeit das wieder zurueck zu setzen
> das Buffer nur noch 60 zeichen lang ist und die letzten 60 leer sind
> als ob ich nur 60 zeichen in buffer geschrieben haette?

Jeder String hat in C immer ein 0-Byte an der letzten Stelle. Damit wird 
das tatsächliche Stringende markiert. Alle stringverarbeitenden 
Funktionen halten sich an diese Konvention.
Um einen String zu löschen, genügt es daher, wenn du dort, wo du das 
Stringende haben möchtest ein 0-Byte hinschreibst.

Schreibs aber so

  Buffer[x] = '\0';

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die restlichen Daten irgendwie sensibel sind (Passworte oder so) 
und du die gerne aus dem Speicher verbannen möchtest, dann empfiehlt GNU 
denhier:

http://www.gnu.org/s/libc/manual/html_node/strfry.html

Aber bitte mit Vorsicht genießen.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also selbst das funzt nicht so wie ich das will.

die zeichen sind nach wie vor vorhanden.


Ich hab mal folgendes gemacht:
for (i = 0; i <= 75; i++) {Buffer[i] = 'X'; }

und siehe da, der Buffer enthaellt danach an den stellen die eigentlich 
weg sein sollen ein X.

Da muss es eine andere moeglichkeit geben.

Wenn ich den Buffer erstelle und sofort danach den per uart oder ans LCD 
sende, so wird nichts angezeigt.
habe ich den Buffer aber einmal voll geschrieben. so bekomme ich die 
Zeichen da drinne nicht mehr raus, nur ueberschreiben kann ich die noch

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber das hier funzt bestens:

for (i = 0; i <= 75; i++) {Buffer[i] = 0; }

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon schrieb:

> und siehe da, der Buffer enthaellt danach an den stellen die eigentlich
> weg sein sollen ein X.
>
> Da muss es eine andere moeglichkeit geben.

Was willst du denn außer überschreiben noch machen? Den SRAM aus dem µC 
rausbauen? Woran erkennt deine Software wie viele Zeichen im String 
sind?

Autor: der peterle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib lieber:
Buffer[i] = '\0';

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist doch auch völlig korrekt.
Alles, was hinter dem 0-Zeichen kommt, ist irrelevant und wird von 
keiner Funktion benutzt.

Willst du es dennoch weghaben, warum auch immer, musst du es explizit 
überschreiben.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube da gibt's absolut gar keinen Unterschied, oder?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst natürlich auch mit malloc() zweimal 60 Bytes allozieren, 
benutzen, und einmal free() aufrufen. ;-)

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zum rücksetzen eines buffers nehm ich meist dann buffer[0] = '\0';
damit ist für alle nachfolgenden stringfunktionen das ding leer
egal was dahinter drinsteht

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.