Fehler im Wiki? - Festkommaarithmetik

Gast #2177000
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
}
#2177768
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
#2177838
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
#2177880
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
Persönliche Seite #2177971
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.
#2178881
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren