Ложное чувство защищенности с 'snprintf_s'

"Безопасный" MSVC sprintf funcions имеют шаблонную версию, которая 'знает' размер целевого буфера. Однако этот код счастливо красит 567890 по стеку после конца bytes...

char bytes[5];
_snprintf_s( bytes, _TRUNCATE, "%s", "1234567890" );

Какая-либо идея, что я делаю неправильно, или действительно ли это - известная ошибка?

(Я работаю в VS2005 - не протестировал в 2008 или 2010),

22
задан James McNellis 29 April 2010 в 14:54
поделиться

1 ответ

Похоже, что это действительно ошибка в Visual C++ 2005 (у меня проблемы с переходом по ссылке; Google также кэширует ее).

Я смог воспроизвести проблему в Visual C++ 2005. В Visual C++ 2008 и 2010 строка правильно усекается (bytes содержит 1234\0) и -1 возвращается, как и ожидалось.

21
ответ дан 29 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

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