Most efficient way to use strcat() with a string and int?

iaacp picture iaacp · Feb 26, 2013 · Viewed 10.1k times · Source

I'm try to concatenate to char * rv with the result of a function call that will return an int. fib() returns an int. The main problem I'm running into is that strcat()'s signature requires a const char * as it's second arg:

char * strcat ( char * destination, const char * source );

Here is a small sample of my code. fib() calculates the nth fibonacci number - in this case, the 7th fibonacci number.

char * rv;
int num;

rv = (char*)malloc(2048*sizeof(char));
num = 7;

...

strcat(rv, (const char *)itoa(fib(num), rv,10));

Obviously this is wrong and won't compile. What is the cleanest way to do this? Do I need another char * var to store the results of itoa() first, instead of using rv?

Thank you for any help you can provide!

Answer

hmjd picture hmjd · Feb 26, 2013

Use snprintf() to construct a buffer containing the int and then concatenate it to your rv buffer. Do not attempt to concatenate the existing content of rv in the same call to snprintf():

snprintf(rv, 2048, "%s%d", rv, itoa(fib(num), rv,10)));

as this means the input and output buffers overlap which is undefined behaviour.

Also:

So the malloc() call would be:

rv = malloc(2048);
if (rv)
{
}