c函数返回格式化字符串

时间:2012-06-24 19:47:00

标签: c string printf

我想做这样的事情:

writeLog(printf("This is the error: %s", error));

所以我正在寻找一个返回格式化字符串的函数。

2 个答案:

答案 0 :(得分:6)

标准库中没有这样的功能,标准库中永远不会有这样的功能。

如果你想要一个,你可以自己写。以下是您需要考虑的事项:

  1. 谁将为返回的字符串分配存储空间?
  2. 谁将为返回的字符串释放存储空间?
  3. 它是否会是线程安全的?
  4. 是否会对返回的最大长度进行限制 字符串与否?

答案 1 :(得分:6)

鉴于不存在这样的函数,请考虑稍微不同的方法:使writeLog类似于printf,即获取字符串和可变数量的参数。然后,让它在内部格式化消息。这将解决内存管理问题,并且不会破坏writeLog的现有用途。

如果您发现这可能,您可以使用以下内容:

void writeLog(const char* format, ...)
{
    char       msg[100];
    va_list    args;

    va_start(args, format);
    vsnprintf(msg, sizeof(msg), format, args); // do check return value
    va_end(args);

    // write msg to the log
}