Предупреждение 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. В будущей версии старое поведение может быть удалено, поэтому код должен быть изменен использовать новое конформное поведение.


может это?

_stprintf(m_szFileNamePath, 256, _T("%s"), strFileName); 

Microsoft предоставляет собственное расширение CRT _swprintf-не совместимо (например) с unix


Microsoft (используется?) префикс в противном случае широко доступные функции не win32, которые не были частью стандарта C с подчеркиванием.


Это должно работать

int len = swprintf( buf, 100, L"%s", L"Hello world" );