2015-10-19 8 views
0

Как у нас есть безопасная версия для _stprintf i.e stprintf_s для hp fortify bufferoverflow предупреждение, Итак, что мы можем использовать вместо wsprintf()? Я пробовал wsprintf_s, его не работает.Безопасная версия wsprintf()?

И может ли кто-нибудь объяснить разницу b/w _stprintf и wsprintf? Или мы можем использовать stprintf_s в качестве защищенной версии для wsprintf.

+1

[swprintf_s] (https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx) возможно? –

ответ

0

Варианты задокументированы под wsprintf:

Примечание Не используйте. Вместо этого используйте одну из следующих функций: StringCbPrintf, StringCbPrintfEx, StringCchPrintf, или StringCchPrintfEx. См. Раздел «Вопросы безопасности».

Если вы предпочитаете хотите использовать защищенную функцию, которая более близко напоминает wsprintf, идти с swprintf_s или _snwprintf_s.

_stprintf - макрос препроцессора, который отображает вызов в ANSI или UNICODE версию. Таблица отображения описана в sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l:

TCHAR.H routine | _UNICODE & _MBCS not defined | _MBCS defined | _UNICODE defined 
----------------+------------------------------+---------------+----------------- 
_stprintf  | sprintf      | sprintf  | _swprintf 

таблицы отображения для _stprintf_s:

TCHAR.H routine | _UNICODE & _MBCS not defined | _MBCS defined | _UNICODE defined 
----------------+------------------------------+---------------+----------------- 
_stprintf_s  | sprintf_s     | sprintf_s  | swprintf_s