Предупреждение Microsoft stprintf
почему я получаю следующее предупреждение для следующего кода:)
код:
_stprintf(m_szFileNamePath,_T("%s"),strFileName);
предупреждение C4996:' _swprintf': swprintf был изменен в соответствии со стандартом ISO C, добавив дополнительный параметр подсчета символов. Чтобы использовать традиционный Microsoft swprintf, установите _CRT_NON_CONFORMING_SWPRINTFS.
Я знаю _strprintf является макросом, если определен _unicode будет оценить _swprintf еще будет функцией sprintf.
теперь что такое _swprintf. Существует функция swprintf, но почему _stprintf оценивается в _swprintf вместо swprintf.
в чем разница между функциями _xxx и xxx?
EDIT:
хорошо, есть два определения для версии UNICODE _stprintf, которое включено?
в файле TCHAR.h или strsafe.h?
5 ответов
http://msdn.microsoft.com/en-us/library/ybk95axf%28VS.80%29.aspx
swprintf является широкосимвольной версией sprintf; аргументы указателя на swprintf являются строками с широкими символами. Обнаружение ошибок кодирования в swprintf может отличаться от обнаружения в sprintf. swprintf и fwprintf ведут себя одинаково, за исключением того, что swprintf записывает выходные данные в строку, а не в конечный файл типа, а swprintf требует, чтобы параметр count указывал максимальное количество символов для записи. Версии этих функций с суффиксом _l идентичны, за исключением того, что они используют переданный параметр locale вместо текущего языкового стандарта потока.
в Visual C++ 2005 swprintf соответствует стандарту ISO C, для которого требуется второй параметр count типа size_t. Чтобы принудительно применить старое нестандартное поведение, определите _CRT_NON_CONFORMING_SWPRINTFS. В будущей версии старое поведение может быть удалено, поэтому код должен быть изменен использовать новое конформное поведение.
Microsoft (используется?) префикс в противном случае широко доступные функции не win32, которые не были частью стандарта C с подчеркиванием.