Я обнаружил , это при использовании _snprintf()
в качестве альтернативы, а также ошибки, возникающие при срабатывании защиты от переполнения буфера. Из того, что я мог быстро увидеть, подобные предостережения относятся к sprintf_s
.
Вы видите проблему? В версии для Linux вывод всегда завершается нулем. В MSVC это не так.
Еще более тонкой является разница между параметром size
в Linux и параметром count
в MSVC. Первый - это размер выходного буфера, включая завершающий ноль, а второй - максимальное количество символов для хранения, которое исключает завершающий ноль.
О, и не забудьте отправить письмо в Microsoft с требованием, чтобы они поддержали текущие языковые стандарты. (Я знаю, что они уже объявили, что не планируют поддерживать C99, но, в любом случае, им это надо. Они этого заслуживают.)
Суть в том, что если вы хотите играть в нее по-настоящему безопасно, вам придется предоставить свой собственный snprintf()
(обертка вокруг _snprintf()
или sprintf_s()
, фиксирующий их нестандартное поведение) для MSVC.