Во-первых, можете ли вы просто портировать свой код для использования iostreams C ++ (например, ostringstream
)? Это полностью устранило бы все возможные проблемы со строкой функций sprintf
, и, если число точек вызова ограничено, вероятно, лучший вариант.
Если это не вариант: функция sprintf_s
в основном является помощником для предотвращения ошибок (и внешних злоупотреблений, вызывающих переполнение буфера. Из http://msdn.microsoft.com/en-us/library/ce3zzk1k%28VS.80%29.aspx мы узнаем, что она делает две вещи: строка формата для допустимых форматов (это не означает, что она выполняет проверку типов - она все еще не может этого сделать), и она позволяет указывать максимальную длину.
Лучшей заменой будет snprintf
, который имеет ограничения по сравнению с sprintf_s
. Это не сделает проверку строки формата. И не все версии гарантируют, что окончательная строка будет иметь нулевое окончание: вы всегда хотите также сохранить нулевое значение в последнем символе вашего буфера после вызова, чтобы гарантировать, что окончательная строка заканчивается нулем.