Forum: Compiler & IDEs String Puffer für atoi löschen


von Max (Gast)


Lesenswert?

Hallo,
ich sende ASCII Zeichen via RS232. Diese Zeichen werden in einem Puffer 
gespeichert. Und anschließend mittel atoi in einen Integer Wert 
umgewandelt. Nur wie lösche ich nach dem Umwandeln den Buffer. Also was 
schreibe ich da am besten für einen Wert an jeden index, damit beim 
nächsten Auswerten, wenn ich weniger Zeichen sende da nicht die Zeichen 
vom letzten mal mit interpretiert werden? Kann ich da einfach eine 
Dezimal 0 reinschreiben, oder wird diese von atoi auch als irgendetwas 
interpretiert?

Danke

von Lord Z. (lordziu)


Lesenswert?

Dezimale 0. Am besten mit memset, geht IMHO am schnellsten.
1
memset(buffer, 0, sizeof(datentyp) * bufferlaenge);

von Oliver (Gast)


Lesenswert?

Ein String in C ist per Definition Null-Terminated, d.h. er hat am Ende 
ein Zeichen mit dem Wert \0. Alles, was danach kommt, interessiert atoi 
nicht mehr.

Das bedeutet aber auch, daß du diese \0 ans Ende deiner Zeichenkette 
anhängen musst, sonst funktioniert atoi nicht.

Oliver

von Karl H. (kbuchegg)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Du versuchst ein Problem lösen, was es garnicht gibt.

Du mußt ja irgendwie wissen, wann der String zuende ist, erst dann 
kannst Du ihn in eine Zahl umwandeln. Ansonsten würdest Du nur einen 
Teil der Ziffern auswerten und einen viel zu kleinen Wert erhalten.

Eine Möglichkeit ist, das CR oder NL am Ende zu erkennen und als ein 
NULL-Byte abzuspeichern. Und voilà, der alte String ist wie von 
Geisterhand verschwunden.

Du mußt also überhaupt nichts extra löschen.


Peter

von Peter D. (peda)


Lesenswert?

Oliver schrieb:
> Das bedeutet aber auch, daß du diese \0 ans Ende deiner Zeichenkette
> anhängen musst, sonst funktioniert atoi nicht.

Nö, muß nicht. Muß nur keine Ziffer sein:

"Die Zeichenkonvertierung bricht beim ersten, nicht-interpretierbaren 
Zeichen
ab."


Peter

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.