【问题标题】:c function to return formatted stringc函数返回格式化字符串
【发布时间】:2012-06-24 19:46:59
【问题描述】:

我想做这样的事情:

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

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

【问题讨论】:

  • 查找snprintf
  • 抱歉,snprintf 的功能似乎与 sprintf 几乎相同,将格式化的字符串放入变量中。我正在寻找的是一个直接返回格式化字符串的函数。
  • 请记住,有人必须释放可能由该神奇格式化函数分配的字符串。让writelLog 这样做很尴尬。您可能需要考虑更长的选项(或使用 C++)。

标签: c string printf


【解决方案1】:

鉴于不存在这样的函数,考虑一个稍微不同的方法:使writeLog printf-like,即采用一个字符串和可变数量的参数。然后,让它在内部格式化消息。这将解决内存管理问题,并且不会破坏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
}

【讨论】:

  • 感谢这个好方法。正是我想要的。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多