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!
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:
sizeof(char)
is guaranteed to be 1
So the malloc()
call would be:
rv = malloc(2048);
if (rv)
{
}
You need either an intermediate char
array to print the number to before strcat
ing, or you can directly sprintf
the number to rv
, but for that you need a pointer to the end,
char *rv = malloc(2048);
char *rv_end = rv;
...
rv_end += sprintf(rv_end, "%d", fib(num));
and also update the rv_end
pointer when appending other things to the buffer.
(Thanks to jthill for the improvement using the return value of sprintf
.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With