Forum: Mikrocontroller und Digitale Elektronik String loeschen


von Simon (Gast)


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?

von Gast (Gast)


Lesenswert?

Buffer[60] = 0;

von Markus F. (pippo)


Lesenswert?

Schöner ist es so:

1
Buffer[60]='/0'

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

von Karl H. (kbuchegg)


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

von Sven P. (Gast)


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.

von Simon (Gast)


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

von Simon (Gast)


Lesenswert?

Aber das hier funzt bestens:

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

von Benedikt K. (benedikt)


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?

von der peterle (Gast)


Lesenswert?

Schreib lieber:
1
Buffer[i] = '\0';

von H.Joachim S. (crazyhorse)


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.

von Matthias (Gast)


Lesenswert?

Ich glaube da gibt's absolut gar keinen Unterschied, oder?

von Mark B. (markbrandis)


Lesenswert?

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

von gast (Gast)


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

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
Noch kein Account? Hier anmelden.