LynxOS strtod 与 Linux 不一样
看来 LynxOS 的 strtod
实现不能处理与 Linux 或 Solaris 相同的所有情况。我遇到的问题是我正在尝试解析一些可能包含十进制或十六进制数字的文本。
在 Linux 上,我调用
a = strtod(pStr, (char **)NULL);
并在 a
中获取输入字符串的预期值,例如 1.234567
和 0x40
。
在 LynxOS 上,十进制数字可以正确解析,但十六进制解析为 0,因为它在遇到“x”时停止。查看手册页,LynxOS 的 strtod 似乎仅支持输入中的十进制字符串。
这里有人知道可以在 Lynx 和 Linux 上运行的替代方案吗?
It seems that LynxOS's implementation of strtod
doesn't handle all the same cases as that of Linux, or for that matter Solaris. The problem I have is that I am trying to parse some text that can have decimal or hexadecimal numbers in it.
On Linux I call
a = strtod(pStr, (char **)NULL);
and I get the expected values in a
for input strings such as 1.234567
and 0x40
.
On LynxOS, the decimal numbers parse correctly, but the hex parses simply as 0 due to stopping when it hits the 'x'. Looking at the man pages, it seems that LynxOS's strtod only supports decimal strings in the input.
Does anyone here know of an alternative that will work on both Lynx and Linux?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
引自标准 (7.20.1.3) ( http:// /www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)
因此,您在 LynxOS 上使用的编译器不是 C99 编译器。
我的 C89 标准副本没有引用
0x
前缀:Quote from the Standard (7.20.1.3) ( http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf )
So, the compiler you're using on LynxOS is not a C99 compiler.
My copy of the C89 Standard has no reference to the
0x
prefix:strtod
采用 3 个参数,而不是两个。如果您通过包含正确的标头 (stdlib.h
) 对其进行原型设计,您的编译器将会发出错误。由于您使用错误的签名调用函数,因此您的程序具有未定义的行为。解决这个问题,一切都会好起来的。strtod
takes 3 arguments, not two. If you had prototyped it by including the correct header (stdlib.h
), your compiler would have issued an error. Since you're calling a function with the wrong signature, your program has undefined behavior. Fix this and everything will be fine.