Сообщение 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) на пришедшую порцию.
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) на пришедшую порцию. Где-то так:
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;
}