vswprintf () без размера буфера падает на маленький буфер вместо EOF. Как передать размер буфера

Использование Borland C ++ Builder 2009

Я использую vswprintf для справки RAD Studio (F1):

int vswprintf(wchar_t *buffer, const wchar_t *format, va_list arglist);

До сих пор я всегда предоставлял большой буфер wchar_t OutputStr[1000] и никогда не было проблем. В качестве теста и желая сделать действие по улучшению, я попробовал небольшой буфер wchar_t OutputStr[12] и заметил, что программа полностью вылетает. Четное try{}catch(...){} не ловит это Codeguard сообщает, что memcpy() терпит неудачу, которая, кажется, внутренняя реализация. Я ожидал EOF в качестве возвращаемого значения вместо.

При поиске в Интернете для vswprintf Я считаю, что вариант c ++ принимает размер буфера в качестве входных данных, но я не могу убедить мой компилятор использовать этот вариант?
Есть идеи, как заставить его использовать BCB2009?

Весь смысл упражнения состоял в том, чтобы реализовать сценарий отступления, когда буфер слишком мал в возможно одной или двух странных ситуациях, чтобы я мог выделить больше памяти для функции и повторить попытку. Но этот механизм, похоже, не работает вообще.

Не знаете, как лучше всего проверить точное количество байтов / символов?

1

Решение

Ты можешь использовать vswprintf_s. Возвращает отрицательное значение при неудаче

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector