Официална дефиниция на sscanf() Форматиран низ?

Внедрявам собствената си версия на sscanf() на различен език (не C или C++).

Почти приключих. Просто се опитвам да обобщя някои от по-фините детайли на значението на форматиращия низ. Търсейки в мрежата обаче, откривам, че не цялата документация за sscanf() е една и съща.

Например, някои казват, че %i обработва осмичен и шестнадесетичен, докато други дори не включват този тип формат. И някои обсъждат %[, докато други не. Освен това някои подробности просто изглеждат пропуснати.

Коя е най-авторитетната документация за това как точно трябва да се интерпретира форматиращият низ?

Не съм фанатик относно спазването на стандарта. Но бих искал да бъда възможно най-съвместим с всички съществуващи форматни низове.

РЕДАКТИРАНЕ

Ако някой се интересува, публикувах моята C# реализация на sscanf( ) кодирайте онлайн.


person Jonathan Wood    schedule 23.02.2011    source източник
comment
C има стандарт. Няколко, всъщност, въпреки че тази конкретна част вероятно не се променя толкова често.   -  person    schedule 23.02.2011
comment
@delnan: Въпросът ми до голяма степен предполага, че има стандарт, въпреки че осъзнавам, че може да няма нито един стандарт. Просто искам да бъда толкова съвместим, колкото е разумно за стандарта.   -  person Jonathan Wood    schedule 23.02.2011


Отговори (5)


Вижте ISO/IEC 9899:1999 7.19.6.2 (fscanf) - това е последният C стандарт

person artyom.stv    schedule 23.02.2011
comment
Благодаря. Потърсих това в Google, но не намерих нищо полезно (или на английски). - person Jonathan Wood; 23.02.2011
comment
@Jonathan Wood - Може да ви изпрати стандарта по имейл - person artyom.stv; 23.02.2011
comment
Би било яко. Добавих своя имейл адрес в края на първоначалния си въпрос. След малко ще го махна. - person Jonathan Wood; 23.02.2011

Целият смисъл на стандарта (или по-голямата част от смисъла така или иначе) е да дава отговори на въпроси като този, така че (поне за мен) изглежда, че копие на стандарта би било очевидната препратка. За да спестите малко пари в сравнение с реалния стандарт, можете доста лесно да отидете от чернова на стандарта.

person Jerry Coffin    schedule 23.02.2011
comment
а? Искате да кажете, че има стандарт, но не е достъпен в мрежата без заплащане? - person Jonathan Wood; 23.02.2011
comment
@Jonathan Wood: да, така е. Можете да получите истинския стандарт от webstore.ansi.org (наред с други места), но струва поне малко пари (изглежда, че са $30 в момента). Честно казано, тъй като техническите книги са сравнително евтини, но за повечето хора безплатната чернова работи също толкова добре. - person Jerry Coffin; 23.02.2011
comment
Леле, научаваш нещо ново всеки ден. Нямам проблем с компаниите, които печелят пари, но таксуването за дефиниция на стандарти, свързани с компютъра, в тази ера на отворена информация в мрежата наистина ме изненадва. - person Jonathan Wood; 23.02.2011
comment
@Jonathon Wood: ISO (и ANSI, IEC и т.н.) продават стандарти до голяма степен, защото почти нямат друг източник на доходи. Някои други (напр. ECMA) могат да си позволят да раздават стандарти, до голяма степен защото са повече или по-малко спонсорирани. Основният въпрос е дали сте готови да платите допълнително за стандарт с надеждата, че спонсорът има по-малко влияние върху резултата (въпреки че в случаи като ISO 29500 това също е под въпрос). - person Jerry Coffin; 23.02.2011

Е, трябва да решите какво прилагате. Можете да следвате един от стандартите C или C++ или някакво специфично за платформата разширение (POSIX, GNU, MSVC).

Ако решите да следвате някой от стандартите, просто го разгледайте и следвайте спецификациите. За специфични за платформата неща ще трябва да следвате документацията на конкретната платформа.

person Šimon Tóth    schedule 23.02.2011
comment
Просто се опитвам да положа разумни усилия, за да бъда възможно най-съвместим с най-големия брой низове във формат sscanf(), които вече съществуват. - person Jonathan Wood; 23.02.2011
comment
@Jonathan :) Е, все пак решението е твое. Ако просто посочите в документацията, че следвате стандарта C или C++, трябва да е напълно ясно за всички какви функции поддържате. - person Šimon Tóth; 23.02.2011
comment
Може би пропускам мисълта ви. Съгласен съм с коментара ви по-горе, но основният човек, който не е напълно наясно какви функции бих поддържал, съм аз. - person Jonathan Wood; 23.02.2011
comment
@Jonathan Е, трябва да изберете. Стандартът изисква основния набор от флагове за форматиране = по-лесно изпълнение, но трескави функции. Ако изберете едно от разширенията, ще предоставите повече функции, но ще бъде по-трудно за изпълнение. Просто се уверете, че сте избрали един от тях и го следвате точно, за да избегнете объркване. - person Šimon Tóth; 23.02.2011

Въпреки че трябва да закупите стандартите ISO, последният проект на ISO/IEC 9899:TC2 (ISO C99), който е почти идентичен, е свободно достъпен. Ето например: www.open-std.org/jtc1 /sc22/wg14/www/docs/n1124.pdf. Функцията sscanf е дефинирана в раздел 7.19.6.7. Въпреки това всички подробности за спецификатора на формата са дадени в описанието на fscanf в 7.19.6.2.

person Clifford    schedule 23.02.2011

В допълнение към стандарта C има и стандарт POSIX, който дефинира sscanf. Този е безплатен на http://www.unix.org/version3/. Както обикновено с POSIX, той е съвместим нагоре.

person MSalters    schedule 24.02.2011