2

似乎 LynxOS 的实现strtod不能处理与 Linux 或 Solaris 相同的所有情况。我遇到的问题是我正在尝试解析一些可以包含十进制或十六进制数字的文本。

在Linux上我打电话

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

我得到了a输入字符串的预期值,例如1.2345670x40

在 LynxOS 上,十进制数字解析正确,但十六进制解析为 0,因为它在碰到“x”时停止。查看手册页,似乎 LynxOS 的 strtod 仅支持输入中的十进制字符串。

这里有人知道可以在 Lynx 和 Linux 上运行的替代方案吗?

4

2 回答 2

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 函数

[...]

主题序列的预期形式是可选的加号或减号,然后是可选的包含小数点字符的非空数字序列,然后是可选的指数部分 [...]

于 2010-12-11T22:12:38.540 回答
-2

strtod需要 3 个参数,而不是两个。如果您通过包含正确的标头 ( stdlib.h) 对其进行了原型化,那么您的编译器将发出错误。由于您使用错误的签名调用函数,因此您的程序具有未定义的行为。解决这个问题,一切都会好起来的。

于 2010-12-11T22:03:50.857 回答