8

我想做这样的事情:

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

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

4

2 回答 2

7

鉴于不存在这样的函数,请考虑一种稍微不同的方法: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
}
于 2012-06-24T20:29:05.977 回答
6

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

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

  1. 谁将为返回的字符串分配存储空间?
  2. 谁将为返回的字符串释放存储空间?
  3. 它是否会是线程安全的?
  4. 返回字符串的最大长度是否有限制?
于 2012-06-24T19:54:00.417 回答