On 23 Okt., 00:02, Stefan Reuther <
stefan.n...@arcor.de> wrote:
> Daniel Krügler wrote:
> > On 21 Okt., 21:10, Stefan Reuther <
stefan.n...@arcor.de> wrote:
> >>Gregor Szaktilla wrote:
> >>>Eine Frage die mich schon lange beschäftigt und die ich immer noch nicht
> >>>beantworten kann: Wieso gibt es ein atoi() aber kein itoa()? Eigentlich
> >>>ist doch alles da, was man braucht.
>
> >>atoi kommt aus der C-Standardbibliothek. Angenommen, es gäbe nun eine
> >>Funktion 'char* itoa(int n)'. Wo kommt der Speicher her, den diese
> >>Funktion zurückgibt? Das eine Bibliotheksfunktion implizit 'malloc'
> >>aufruft, war wohl früher nicht so gerne gesehen, und das ganze mit
> >>statischem Speicher ist auch nicht so der Brüller.
>
> > Das sollte kein Problem sein. Typische Implementierungen von itoa
> > habe sehr grosse Ähnlichkeit zu sprintf, siehe z.B.
>
> Genau darauf wollte ich hinaus: man braucht kein itoa, wenn man ein
> sprintf hat.
Leider bietet sprintf nicht die notwendigen Multi-Basen-Support,
lediglich
8, 10 und 16 werden unterstützt. Im Gegensatz dazu unterstützt die
andere Richtung *alle* Basen von 2 bis 36. Es gibt aus meiner Sicht
keinen Grund, warum sprintf nicht den gleichen Bereich abdeckt.
> >>Also muss der Nutzer
> >>Speicher zur Verfügung stellen. Außerdem wäre natürlich noch schön, wenn
> >>er Dinge wie die Zahlenbasis wählten könnte.
>
> > Ich denke, dass das Zahlenbasis-Argument ein wesentlicher Beweggrund
> > dieses Beitrags war - zumindest habe ich das soverstanden.
>
> "beliebige Zahlenbasis" hab ich aus dem OP nicht herausgelesen,
Ich beziehe mich hier auf den Punkt:
"Man schafft man es doch auch, eine beliebige Zahl in irgendeinem
Zahlensystem auf dem Bildschirm auszugeben(?!)"
> auf den
> Bildschirm kann man doch auch nur oct/dec/hex ausgeben.
Ich vermute, dass du dich hier auf eine Ausgabe mit Präfix beziehst,
denn es ist ist klar, dass alle Basen von 2-36 realisiert werden
können: Wie gesagt, die C-Library bietet die Möglichkeit, jede
String-Representation im Base-Bereich 2-36 in einen integralen
Wert zu konvertieren, siehe strtol und Co.
> >>>Was habe ich übersehen? Man schafft man es doch auch, eine beliebige
> >>>Zahl in irgendeinem Zahlensystem auf dem Bildschirm auszugeben(?!).
>
> >>Auf die gleiche Weise bekommt man doch auch einen String.
>
> > Diese Antwort habe ich nicht verstanden.
>
> Sollte heißen: die Bibliotheken (C-Standardbibliothek, C++-Standard
> bibliothek) haben zu dem Anwendungsfall "beliebige Zahl [...] auf dem
> Bildschirm ausgeben" immer noch eine parallele, äquivalente Möglichkeit,
> einen String zu erzeugen.
Das ist richtig, aber es überlässt damit dem Programmierer die
Aufgabe,
die String-Konvertierung durchzuführen. Ich denke, die C-Library
sollte diese Funktionalität von sich aus bereitstellen, bevor man
jeder
seine eigene to_string-Funktion neu schreibt.