Использование 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
я обнаружил, что вариант С++ принимает размер буфера в качестве входных данных, но я не могу убедить свой компилятор использовать этот вариант? Любая идея, как заставить его использовать BCB2009?
Весь смысл упражнения заключался в том, чтобы реализовать резервный сценарий на тот случай, когда буфер слишком мал, возможно, в одной или двух необычных ситуациях, чтобы я мог выделить больше памяти для функции и повторить попытку. Но этот механизм, похоже, вообще не работает.
Не знаете, как лучше всего проверить точное количество необходимых байтов/символов?
raise()
выдать ошибку, когда превысят его. - person wallyk   schedule 28.01.2016_vsnwprintf
- person M.M   schedule 28.01.2016_vsnwprintf
работает. Спасибо ! Любая идея, как я могу проверить, сколько байтов/символов мне нужно, если буфер слишком мал?vsnwprintf_s
был бы хорош для этого, но он не включен в c++Builder 2009. - person Peter   schedule 28.01.20160
для размера, должен возвращать требуемый размер, ничего не записывая - person M.M   schedule 28.01.2016vswprintf
. - person M.M   schedule 28.01.2016vsnprintf
- person Peter   schedule 28.01.2016vsnwprintf
(извините за это). Это беспорядок. - person Peter   schedule 28.01.2016