c - 将 strcat() 与字符串和 int 一起使用的最有效方法?

标签 c casting int concatenation strcat

我尝试将 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)));

因为这意味着输入和输出缓冲区重叠,这是未定义的行为。

还有:

所以 malloc() 调用将是:

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

关于c - 将 strcat() 与字符串和 int 一起使用的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15094726/

相关文章:

c - 我这样做对吗? - C代码

c++ - 使用 dynamic_cast : what happenes to the allocated memory 强制转换后删除指针

c++ - 错误: cannot convert 'std::basic_string<char>' to 'char' in assignment

windows - 64 位系统的整数大小差异(与我的旧 32 位 pc 系统混淆)

c - 如何在线程之间发送变量/信息

c - 结构填充和包装

c# - 使用 Type 类型的参数进行转换

java - 如何从 MySQL 读取 LONGBLOB

ios - 从另一个 Objective-C 类访问 int

c - 将 f(mystruct *a) 更改为 f(const mystruct *a) 会破坏 C 中的 API/ABI 吗?