функция c для возврата отформатированной строки

Я хотел бы сделать что-то вроде этого:

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

поэтому я ищу функцию, которая возвращает отформатированную строку.

2 ответов


учитывая, что такой функции не существует, рассмотрим несколько иной подход: make 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
}

в стандартной библиотеке нет такой функции, и в стандартной библиотеке ее никогда не будет.

Если вы хотите, вы можете написать его самостоятельно. Вот о чем вам нужно подумать:

  1. кто будет выделять хранилище для возвращаемой строки?
  2. кто освободит хранилище для возвращаемой строки?
  3. это будет потокобезопасно или нет?
  4. будет ли ограничение на максимальную длину возвращенный струна или нет?