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.
-
4So it does not support ANSI C.KeatsPeeks– KeatsPeeks2010-01-26 08:34:13 +00:00Commented Jan 26, 2010 at 8:34
-
1Well yes. This is indeed an ongoing discussion with the SPC providers marketing department ;)Maxwin– Maxwin2010-01-26 11:53:12 +00:00Commented Jan 26, 2010 at 11:53
Add a comment
|
1 Answer
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.
4 Comments
R Samuel Klatchko
Use this version with care as it can overflow the buffer.
Alok Singhal
Yes, that's true. The caller has to know if the buffer has enough space or not. Just like
sprintf().R Samuel Klatchko
Which is why you should never use
sprintf() and only use snprintf()Alok Singhal
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 stackoverflow.com/questions/1996374/… for example.