Forum: www.mikrocontroller.net Fehler im Wiki? - Festkommaarithmetik


von Philipp (Gast)


Lesenswert?

Hallo,
hab mir hier 
http://www.mikrocontroller.net/articles/Festkommaarithmetik#ITOA_selbst_gemacht 
gerade mal die itoa funktion angesehn.

müsste die funktion nicht so aussehen:
1
void my_uitoa(uint32_t zahl, char* string){
2
  int8_t i;                             // schleifenzähler
3
 
4
  string[10]='\0';                       // String Terminator
5
  for(i=9; i>0; i--) {
6
    string[i]=(zahl % 10) +'0';         // Modulo rechnen, dann den ASCII-Code von '0' addieren
7
    zahl /= 10;
8
  }
9
}

von Yalu X. (yalu) (Moderator)


Lesenswert?

>  for(i=9; i>0; i--) {

Damit läuft i von 9 bis 1. string[0] wird nicht beschrieben, sollte
aber.

von Philipp (Gast)


Lesenswert?

ahh... stimmt.
hatte eben nen ziemlich dummen denkfehler.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Die optimistische Annahme, das der übergebene Puffer wenigstens 11 
Zeichen umfaßßt ist zumindest nicht gerade die feine englische Art ;)

von Falk B. (falk)


Lesenswert?

@  Läubi .. (laeubi) (Moderator) Benutzerseite

>Die optimistische Annahme, das der übergebene Puffer wenigstens 11
>Zeichen umfaßßt ist zumindest nicht gerade die feine englische Art ;)

Wei willst denn in C sicherstellen, das dein Puffer groß genug ist? Das 
wird IMMER manuell gemacht, eine automatische Bereichsüberprüfung gibt 
es bei C nicht.

MFG
Falk

von Falk B. (falk)


Lesenswert?

@  Philipp (Gast)

>hatte eben nen ziemlich dummen denkfehler.

Eben. Du hast aus >= ein > gemacht. Im Wiki ist es richtig.

Ist Copy & Paste so schwer im Gutenbergzeitalter?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Falk Brunner schrieb:
> Wei willst denn in C sicherstellen, das dein Puffer groß genug ist?

Man könnte z.B. die Bufferlänge mit übergeben. Oder wenigstens im 
Kommentar darauf Hinweisen wie groß der Puffer (mindestens) sein muß!

von Vlad T. (vlad_tepesch)


Lesenswert?

Läubi .. schrieb:
> Falk Brunner schrieb:
>> Wei willst denn in C sicherstellen, das dein Puffer groß genug ist?
>
> Man könnte z.B. die Bufferlänge mit übergeben.
ist trotzdem manuell, da kann man irgendwas übergeben, genauso wie mit 
dem Buffer, der eventuell zu klein ist.
Die Verantwortung, dass das ganze richtig benutzt wird, liegt in beiden 
Fällen beim Programmierung
> Oder wenigstens im
> Kommentar darauf Hinweisen wie groß der Puffer (mindestens) sein muß!
der ist allerdigns obligatorisch

von Falk B. (falk)


Lesenswert?

@  Läubi .. (laeubi) (Moderator) Benutzerseite

>Man könnte z.B. die Bufferlänge mit übergeben.

Wird in C selten gemacht, weil es wenig bringt. Dass ein Puffer groß 
genug sein muss ist implizit.

> Oder wenigstens im
> Kommentar darauf Hinweisen wie groß der Puffer (mindestens) sein muß!

Wer lesen kann . . .

"Hier ist nun unsere erste einfache Funktion, um eine vorzeichenlose 32 
Bit Zahl in einen String umzuwandeln. Diese kann maximal 10 
Dezimalstellen haben (0..4294967295), also wird ein Speicher für 11 
Bytes benötigt (letztes Byte für den Stringterminator)."

Aber wenn es dich glücklich macht, ergänze einen Kommentar im Quelltext.

MFG
Falk

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Falk Brunner schrieb:
> Aber wenn es dich glücklich macht, ergänze einen Kommentar im Quelltext

Das hat nix mit Glück oder Unglück zu tun, ich wollte nur darauf 
Hinweisen, der "Nutzer" hat unter Umständen nur die API Beschreibung, 
und dann könne solche Hinweise nützlich sein.

Falk Brunner schrieb:
> weil es wenig bringt

Kann man drüber streiten, so sieht zumindest ein zweiter oder dritter 
der über den Quellcode schaut gleich was Sache ist und die Ausgabe ist 
bestenfalls verstümmelt, als das ggf. der Ganze Controller abstützt 
obwohl "der Fehler gar nicht in der Software liegen kann"...

Aber wie gesagt ich will da auch nicht drüber streiten, jeder wie er 
mag.

von Uhu U. (uhu)


Lesenswert?

Falk Brunner schrieb:
>>Man könnte z.B. die Bufferlänge mit übergeben.
>
> Wird in C selten gemacht, weil es wenig bringt. Dass ein Puffer groß
> genug sein muss ist implizit.

Das war mal in der Kernighan-Richie-Zeit. Ist schon einige Jahre her...

von Simon K. (simon) Benutzerseite


Lesenswert?

Was ist die "Kernighan und Ri*t*chie" Zeit? Und Wann hat sie geendet? 
;-) Meinst du die Zeit, wo ANSI-C Standard war?

Die Pufferlänge zu übergeben ist nicht selten. Es wird doch 
beispielsweise darauf hingewiesen nicht mehr strcpy sondern strncpy 
(als exemplarisches Beispiel) zu benutzen.

von Uhu U. (uhu)


Lesenswert?

Simon K. schrieb:
> Die Pufferlänge zu übergeben ist nicht selten.

Im alten KR-C in den 80er Jahren hat man Puffer mit Gottvertrauen 
behandelt und Funktionen wie strncpy wurden meistens nur dann verwendet, 
wenn man nur den Stringanfang kopieren wollte.

Mittlerweile gelten Funktionen, die keine Pufferlänge übergeben als 
unsicher und veraltet.

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.