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?
Schöner ist es so:
1 | Buffer[60]='/0' |
Somit ist offensichtlich, dass hier ein Ende des Strings markiert wird.
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';
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.
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
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?
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.
Du kannst natürlich auch mit malloc() zweimal 60 Bytes allozieren, benutzen, und einmal free() aufrufen. ;-)
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.