Как получить последние символы форматированного вывода, когда snprintf возвращает больше, чем его аргумент размера?

Вы должны использовать запрос INSERT с оператором SELECT, который выполняется намного быстрее. Пример:

INSERT INTO table (column1, column2)
SELECT column1, 
column2 
FROM table2

, где table2 - ваша таблица 0_suppliers.

0
задан Yuri J 18 January 2019 в 22:37
поделиться

1 ответ

Решение:

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>

int snprintfEnd(char *str, size_t size, const char *format, ...)
{
  va_list ap1, ap2;

  va_start(ap1, format);
  va_copy(ap2, ap1);

  /* get length of all */
  int sz = vsnprintf(0, 0, format, ap2);

  va_end(ap2);

  /* get all */
  char * all = malloc(sz + 1);

  vsprintf(all, format, ap1);
  va_end(ap1);

  /* copy the expected part */
  int r;

  if (sz < size) {
    strcpy(str, all);
    r = sz;
  }
  else {
    strcpy(str, all + sz - size);
    r = size;
  }

  free(all);
  return r;
}

int main()
{
  char s[6];

  int ln = snprintfEnd(s, 5, "%d %d %d", 1, 234, 567);

  printf("%d : '%s'\n", ln, s);

  return 0;
}

Исполнение:

5 : '4 567'
0
ответ дан bruno 18 January 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: