Официальное определение строки формата sscanf()?

Я реализую свою собственную версию sscanf() на другом языке (не C или C++).

Я в основном закончил. Я просто пытаюсь обобщить некоторые более тонкие детали значения строки формата. Однако, просматривая Интернет, я обнаружил, что не вся документация для sscanf() одинакова.

Например, некоторые говорят, что %i обрабатывает восьмеричные и шестнадцатеричные числа, а другие даже не включают этот тип формата. И некоторые обсуждают %[, а другие нет. Кроме того, некоторые детали просто упущены.

Какова наиболее авторитетная документация о том, как именно следует интерпретировать строку формата?

Я не фанатик соблюдения стандарта. Но я хотел бы быть максимально совместимым с любыми существующими строками формата.

ИЗМЕНИТЬ

Если кому-то интересно, я опубликовал свою реализацию 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
Спасибо. Я погуглил, но ничего полезного не нашел (или на английском). - 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
@ Джонатан Вуд: да, верно. Вы можете получить настоящий стандарт на 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
@ Джонатан :) Ну, это все еще твое решение. Если вы просто укажете в документации, что следуете стандарту C или C++, всем должно быть совершенно ясно, какие возможности вы поддерживаете. - person Šimon Tóth; 23.02.2011
comment
Возможно, я упускаю из виду вашу мысль. Я согласен с вашим комментарием выше, но главный человек, которому не совсем ясно, какие функции я буду поддерживать, это я. - person Jonathan Wood; 23.02.2011
comment
@ Джонатан Ну, тебе нужно выбрать. Стандарт требует базового набора флагов форматирования = более простая реализация, но лихорадочные функции. Если вы выберете одно из расширений, вы предоставите больше возможностей, но его будет сложнее реализовать. Просто убедитесь, что вы выбрали один из них и точно следуете ему, чтобы избежать путаницы. - 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