FSF::sprintf/sscanf/snprintf
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
FSF::sprintf/sscanf/snprintf
на первый взгляд функции хорошие и полезные. но есть одно но. реализация использует аналоги из rtl. соответственно могут различаться поддерживаемые форматы. и один и тот же бинарник плагина может работать по разному с по разному собранным фаром.
нужно ли нам такое поведение или стоит удалить данные функции из апи?
нужно ли нам такое поведение или стоит удалить данные функции из апи?
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: FSF::sprintf/sscanf/snprintf
Как вариант, можно написать в документации, что гарантируется только то, что прописано в стандарте C, а Microsoft-specific расширения на ваш страх и риск.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
а что, свежий вижуал %lld поддерживает? даже если да, то msvcrt, используемый в mingw — нет.Centaur wrote:Как вариант, можно написать в документации, что гарантируется только то, что прописано в стандарте C, а Microsoft-specific расширения на ваш страх и риск.
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Re: FSF::sprintf/sscanf/snprintf
Насколько я понимаю, %lld поддерживается всеми компиляторами последних лет. Но результат выполнения будет зависеть от msvcrt.dll, установленной на системе.zg wrote:а что, свежий вижуал %lld поддерживает? даже если да, то msvcrt, используемый в mingw — нет.
Только что собрал простейший тест - 32-битный EXE, печатающий число 0x1234567812345678LL в формате %lld. На Windows XP SP3 он напечатал младшие 32 бита, а на Windows 7 - всё число. Тот же самый 32-битный экзешник.
Re: FSF::sprintf/sscanf/snprintf
Shmuel
Похоже Вы правы. Я проверял на win7 x64. Сейчас проверил на xp - отрезает.
Причем win7-32 - ok, xp-64 только 32 бита....
Upd: Если точнее: vc приложение везде ок.
gcc приложение на win7,Vista - ок, на xp - усечение. От разрядности ос и приложения не зависит.
Похоже Вы правы. Я проверял на win7 x64. Сейчас проверил на xp - отрезает.
Причем win7-32 - ok, xp-64 только 32 бита....
Upd: Если точнее: vc приложение везде ок.
gcc приложение на win7,Vista - ок, на xp - усечение. От разрядности ос и приложения не зависит.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
всё ещё хуже чем я думал.
ну gcc использует msvcrt.dll. это, как я понимаю, vc6. и если собирать vc6, а может и чуть более поздними, то на xp/2003 ll будет игнорироваться.2useven10 wrote:Upd: Если точнее: vc приложение везде ок.
gcc приложение на win7,Vista - ок, на xp - усечение. От разрядности ос и приложения не зависит.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
когда-то фар собирался борландом. там не работало. чем будет собираться фар завтра и будет ли там нестандартный i64 — неизвестно.2useven10 wrote:Ну "%I64d" везде работает...
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
собрал я фар gcc отсюда и оказалось, что FSF.sprintf начал хотеть на %s — char*. внезапно.
Re: FSF::sprintf/sscanf/snprintf
wchar_t ws[200];
_snwprintf(ws, sizeof(ws)/sizeof(ws[0]), L"%s\n", L"wtext");
компилится и работает без проблем, сборка gcc та же самая.
add: как и _vsnwprintf, swprintf, vswprintf ...
_snwprintf(ws, sizeof(ws)/sizeof(ws[0]), L"%s\n", L"wtext");
компилится и работает без проблем, сборка gcc та же самая.
add: как и _vsnwprintf, swprintf, vswprintf ...
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
FSF.sprintf(buffer,L"%s",L"test") даёт в buffer "t". чяднт?2useven10 wrote:wchar_t ws[200];
_snwprintf(ws, sizeof(ws)/sizeof(ws[0]), L"%s\n", L"wtext");
компилится и работает без проблем, сборка gcc та же самая.
add: как и _vsnwprintf, swprintf, vswprintf ...
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: FSF::sprintf/sscanf/snprintf
тестовый плагин. везде печатает test. на фаре собранном gcc 4.7.0 по ссылке выше: t. x86.
- Attachments
-
- testprintf.7z
- (2.63 KiB) Downloaded 159 times