Информация об изменениях

Сообщение Re: Удивительное рядом - 2. vsnprintf от 13.05.2016 7:15

Изменено 13.05.2016 7:23 netch80

Здравствуйте, Dair, Вы писали:

D>std::string formatString(const char* format, ...)

D>Берёт строчку-форматтер в формате printf, при помощи vsnprintf подставляет в неё параметры, отдаёт std::string на выходе.

Кстати. Буфер фиксированного размера? Он адаптируется под конкретный вызов?

Насколько я вижу, в Android NDK торековский stdio. В этом случае, вместо snprintf() полезнее fwopen()+fprintf(), а коллбэк в fwopen() пусть расширяет целевую строку (std::string) на пришедшую порцию.
Здравствуйте, Dair, Вы писали:

D>std::string formatString(const char* format, ...)

D>Берёт строчку-форматтер в формате printf, при помощи vsnprintf подставляет в неё параметры, отдаёт std::string на выходе.

Кстати. Буфер фиксированного размера? Он адаптируется под конкретный вызов?

Насколько я вижу, в Android NDK торековский stdio. В этом случае, вместо snprintf() полезнее fwopen()+fprintf(), а коллбэк в fwopen() пусть расширяет целевую строку (std::string) на пришедшую порцию. Где-то так:

static int addPortion(void* cookie, const char *portion, int plen) {
  std::string* tp = (std::string*) cookie;
  tp->append(portion, plen);
  return plen;
}

size_t formatString(std::string& target, const char* format, ...) {
  FILE* fw = fwopen(&target, addPortion);
  va_list ap;
  va_start(ap, format);
  size_t ret = fprintf(fw, format, ap);
  va_end(ap);
  fclose(fw);
  return ret;
}