ANSI C, integer to string without variadic functions
Asked Answered
C

1

4

I'm currently working with a PLC that supports ANSI C, but uses its own flavour of the GNU compiler, which doesn't compile any variadic functions and things like itoa. So using sprintf & co. isn't an option for converting integers to strings. Can anyone guide me to a site where a robust, sprintf- free implementation of itoa is listed or post a suitable algorithm here? Thanks in advance.

Crystie answered 26/1, 2010 at 8:31 Comment(2)
So it does not support ANSI C.Faultfinder
Well yes. This is indeed an ongoing discussion with the SPC providers marketing department ;)Crystie
S
6

This is from K&R:

void itoa(int n, char s[])
{
    int i, sign;

    if ((sign = n) < 0)  /* record sign */
        n = -n;          /* make n positive */
    i = 0;
    do {       /* generate digits in reverse order */
        s[i++] = n % 10 + '0';   /* get next digit */
    } while ((n /= 10) > 0);     /* delete it */
    if (sign < 0)
        s[i++] = '-';
    s[i] = '\0';
    reverse(s);
} 

reverse() just reverses a string.

Succumb answered 26/1, 2010 at 8:35 Comment(4)
Use this version with care as it can overflow the buffer.Knutson
Yes, that's true. The caller has to know if the buffer has enough space or not. Just like sprintf().Succumb
Which is why you should never use sprintf() and only use snprintf()Knutson
I agree with you, if you replace "never" with "almost never". In general, one should prefer snprintf(). But if one is sure that the target buffer has the required size, sprintf() is fine too. See #1996874 for example.Succumb

© 2022 - 2024 — McMap. All rights reserved.