LynxOS не такой, как Linux - PullRequest
       38

LynxOS не такой, как Linux

2 голосов
/ 12 декабря 2010

Похоже, что реализация LynxOS strtod не обрабатывает все те же случаи, что и в Linux, или в этом отношении Solaris. У меня проблема в том, что я пытаюсь разобрать текст, который может содержать десятичные или шестнадцатеричные числа.

В Linux я звоню

a = strtod(pStr, (char **)NULL);

и я получаю ожидаемые значения в a для входных строк, таких как 1.234567 и 0x40.

В LynxOS десятичные числа анализируются правильно, но шестнадцатеричный код анализируется просто как 0 из-за остановки, когда он достигает «x». Глядя на справочные страницы, кажется, что strtod LynxOS поддерживает только десятичные строки во входных данных.

Кто-нибудь здесь знает альтернативу, которая будет работать как на Lynx, так и на Linux?

Ответы [ 2 ]

2 голосов
/ 12 декабря 2010

Цитата из стандарта (7.20.1.3) (http://www.open -std.org / JTC1 / sc22 / wg14 / www / docs / n1256.pdf )

Ожидаемая форма предметной последовательности - необязательный знак плюс или минус, затем один из следующих:
- непустая последовательность десятичных цифр, необязательно содержащая символ десятичной точки, затем необязательная часть экспоненты, как определено в 6.4.4.2.;
- 0x или 0X, затем непустая последовательность шестнадцатеричных цифр, необязательно содержащая символ десятичной точки, а затем необязательная двоичная экспоненциальная часть, как определено в 6.4.4.2;
- [...]

Итак, компилятор, который вы используете в LynxOS, не является компилятором C99.


Моя копия стандарта C89 не имеет ссылки на префикс 0x:

4.10.1.4 Функция strtod

[...]

Ожидаемая форма последовательности субъекта - необязательный знак плюс или минус, затем непустая последовательность цифрнеобязательно содержащий знак десятичной точки, затем необязательныйэкспонентная часть [...]

0 голосов
/ 12 декабря 2010

strtod принимает 3 аргумента, а не два. Если бы вы прототипировали его, включив правильный заголовок (stdlib.h), ваш компилятор выдаст ошибку. Поскольку вы вызываете функцию с неверной подписью, ваша программа имеет неопределенное поведение. Исправьте это, и все будет хорошо.

...