似乎LynxOS的strtod
实现不能处理与Linux相同的情况,或者Solaris的情况。我遇到的问题是我试图解析一些可能包含十进制或十六进制数字的文本。
在Linux上我打电话
a = strtod(pStr, (char **)NULL);
我在a
中获得1.234567
和0x40
等输入字符串的预期值。
在LynxOS上,十进制数正确解析,但十六进制解析为0,因为当它到达'x'时停止。看看手册页,似乎LynxOS的strtod只支持输入中的十进制字符串。
有没有人知道可以在Lynx和Linux上运行的替代方案?
答案 0 :(得分:2)
来自标准(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函数
[...]
主题序列的预期形式是可选的加号或 减号,然后是一个非空的数字序列,可选地包含一个 小数点字符,然后是可选的指数部分[...]
答案 1 :(得分:-2)
strtod
需要3个参数,而不是2个。如果您通过包含正确的标头(stdlib.h
)对其进行了原型化,那么您的编译器就会发出错误。由于您使用错误的签名调用函数,因此您的程序具有未定义的行为。解决这个问题,一切都会好的。