Latest post of the previous page:
x3 - с плагином у меня результат аналогичный...FSF::sprintf/sscanf/snprintf
- zg
- zero-gravity
- Posts: 5878
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 158 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
ну и что со всем этим делать?
собственный принтф в mingw64-crt уже 14 месяцев. вряд ли что-то измениться.
есть виндовый wsprintf который с xp даже __int64 поддерживает. т.е. есть всё кроме float. что там с __int64 на w2k — вопрос конечно.
есть опять же crt-ый printf который хоть и [sarcasm]раздувает плагин неимоверно[/sarcasm], но даёт хоть какую-то гарантию.
sscanf — этим кто-то пользуется?
в общем жду аргументов против выкидывания.
собственный принтф в mingw64-crt уже 14 месяцев. вряд ли что-то измениться.
есть виндовый wsprintf который с xp даже __int64 поддерживает. т.е. есть всё кроме float. что там с __int64 на w2k — вопрос конечно.
есть опять же crt-ый printf который хоть и [sarcasm]раздувает плагин неимоверно[/sarcasm], но даёт хоть какую-то гарантию.
sscanf — этим кто-то пользуется?
в общем жду аргументов против выкидывания.
Re: FSF::sprintf/sscanf/snprintf
FSF.snprintf работает нормально, его выкидывать не надо.
думаю это пляски с _GLIBCXX_HAVE_BROKEN_VSWPRINTF ...
upd: FSF.sprintf в силу его проблемности и отсутствия проверки на размер буфера, пожалуй надо выкинуть
думаю это пляски с _GLIBCXX_HAVE_BROKEN_VSWPRINTF ...
upd: FSF.sprintf в силу его проблемности и отсутствия проверки на размер буфера, пожалуй надо выкинуть
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: FSF::sprintf/sscanf/snprintf
В Священном стандарте ISO/IEC 9899:1999 (E), глава 7.24.2.1, стих 8:
Таким образом, интерпретация %s как широкой строки в wprintf — это Microsoft-specific расширение, а по стандарту нужно использовать формат %ls. Если верить MSDN Library, рантайм Visual C поддерживает такое использование как минимум с 2003.8 The conversion specifiers and their meanings are:
[…]
s
If no l length modifier is present, the argument shall be a pointer to the initial element of a character array containing a multibyte character sequence beginning in the initial shift state. Characters from the array are converted as if by repeated calls to the mbrtowc function, with the conversion state described by an mbstate_t object initialized to zero before the first multibyte character is converted, and written up to (but not including) the terminating null wide character. If the precision is specified, no more than that many wide characters are written. If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character.
If an l length modifier is present, the argument shall be a pointer to the initial element of an array of wchar_t type. Wide characters from the array are written up to (but not including) a terminating null wide character. If the precision is specified, no more than that many wide characters are written. If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character.
- zg
- zero-gravity
- Posts: 5878
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 158 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
очевидно это сделано чтобы работало _T("%s") в зависимости определено UNICODE или нет. по хорошему — не докопаться, о людях думали.Centaur wrote:Таким образом, интерпретация %s как широкой строки в wprintf — это Microsoft-specific расширение
если речь про %ls, то понятно, но что толку? если про %s — то непонятно.а по стандарту нужно использовать формат %ls. Если верить MSDN Library, рантайм Visual C поддерживает такое использование как минимум с 2003.
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: FSF::sprintf/sscanf/snprintf
Думание о людях ведёт к икоте.
Что до толку — все плагины должны использовать %ls, а %s прекратить и перестать. О портабельности между ANSI и Unicode всё равно уже давно можно забыть, а портабельность между компиляторами и рантаймами вещь хорошая.
Что до толку — все плагины должны использовать %ls, а %s прекратить и перестать. О портабельности между ANSI и Unicode всё равно уже давно можно забыть, а портабельность между компиляторами и рантаймами вещь хорошая.
- zg
- zero-gravity
- Posts: 5878
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 158 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
ну это сферические плагины в вакууме. в реальности проще выкинуть.Centaur wrote:все плагины должны использовать %ls, а %s прекратить и перестать.