Re: wo ist itoa()?

From: Harold Gutch <logix(at)foobar.franken.de>
Date: Mon, 15 Dec 2008 02:10:52 +0100

On Mon, Dec 15, 2008 at 01:17:35AM +0100, Patrick Hess wrote:
> siehe Manpage), aber ein spezielles itoa() gibt es nicht. Man muß
> dafür auf snprintf(3) zurückgreifen, quasi das Schweizer Messer für
> so ziemlich jede Art von Konvertierungen:

So weit stimme ich absolut zu, allerdings:

> snprintf(string, strlen(string), "%i", integer);
>
> Wenn man das öfters benötigt, kann man sich ja ein Makro anlegen:
>
> #define itoa(i, s) snprintf((s), strlen((s)), "%i", (i));

Vorsicht, falls "string" schon früh ein NUL-byte hat, bekommt man hier
weniger als erwartet, etwa so:

        char *string = calloc(1, N);
        ...
        snprintf(string, strlen(string), "%i", i);

Umgekehrt schreibt das Makro zu viel falls string nirgends ein
NUL-byte enthält (auch nicht am Ende)!

Falls string kein char * sondern ein char[N] array ist, leistet oben
sizeof() anstatt strlen() das gewünschte. Ich würde aber nicht dazu
raten, das Makro blind zu benutzen, da sizeof(char *) eine Konstante
(4 bzw. 8) ist, in dem Fall also der 2. Parameter auch nicht den Wert
hat den man eigentlich dort haben möchte. Letztenendes empfehle ich
eher ich, das ganze immer "manuell" machen, also:

        char string[N];
        ...
        snprintf(string, sizeof(string), "%i", i);

oder

        char *string = calloc(1, N);
        ...
        snprintf(string, N, "%i", i);

ciao,
  Harold

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 15 Dec 2008 - 02:10:59 CET

search this site