我尝试将 char * rv
与将返回 int
的函数调用的结果连接起来。 fib()
返回一个整数。我遇到的主要问题是 strcat()
的签名需要 const char *
作为第二个参数:
char * strcat ( char * destination, const char * source );
这是我的代码的一小部分示例。 fib()
计算第 n 个斐波那契数 - 在本例中为第 7 个斐波那契数。
char * rv;
int num;
rv = (char*)malloc(2048*sizeof(char));
num = 7;
...
strcat(rv, (const char *)itoa(fib(num), rv,10));
显然这是错误的,无法编译。最干净的方法是什么?我是否需要另一个 char * var
来首先存储 itoa()
的结果,而不是使用 rv
?
感谢您提供的任何帮助!
最佳答案
使用snprintf()
构造一个包含 int
的缓冲区,然后将其连接到您的 rv
缓冲区。不要不要尝试在对snprintf()
的同一调用中连接rv
的现有内容:
snprintf(rv, 2048, "%s%d", rv, itoa(fib(num), rv,10)));
因为这意味着输入和输出缓冲区重叠,这是未定义的行为。
还有:
sizeof(char)
保证为1
- 参见 Do I cast the result of malloc?
所以 malloc()
调用将是:
rv = malloc(2048);
if (rv)
{
}
关于c - 将 strcat() 与字符串和 int 一起使用的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15094726/