我正在使用来自http://www.netlib.org/fp/dtoa.c的 David M. Gay 的 dtoa() 函数在 Rebol3 解释器中实现 MOLD 函数。它运行良好,在 Linux ARM、Linux X86、Android ARM、MS Windows 和 OS X X86 下测试。
在此过程中,我还想使用上述源中的 strtod() 函数,假定的优势是在不同平台上获得一致的结果。但是,strtod 调用会导致内存保护问题。有人知道使该功能正常工作可能需要什么吗?
我正在使用来自http://www.netlib.org/fp/dtoa.c的 David M. Gay 的 dtoa() 函数在 Rebol3 解释器中实现 MOLD 函数。它运行良好,在 Linux ARM、Linux X86、Android ARM、MS Windows 和 OS X X86 下测试。
在此过程中,我还想使用上述源中的 strtod() 函数,假定的优势是在不同平台上获得一致的结果。但是,strtod 调用会导致内存保护问题。有人知道使该功能正常工作可能需要什么吗?
您将需要以strtod
适当的方式调用,特别是注意第二个参数。该参数应该是指向 char 的指针的地址,并且它被设置为指向输入字符串中未处理的第一个字符strtod
。如果您传递指针而不是指针的地址,并且该指针未初始化为恰好是可写内存的东西(如NULL
),则您可能会遇到运行时错误。
int
main(int argc, char *argv[])
{
char *endptr, *str;
double val;
if (argc < 2) {
fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
exit(EXIT_FAILURE);
}
str = argv[1];
errno = 0;
val = strtod(str, &endptr);
if (errno != 0) {
perror("strtod");
exit(EXIT_FAILURE);
}
if (endptr == str) {
fprintf(stderr, "No digits were found\n");
exit(EXIT_FAILURE);
}
printf("strtod() returned %f\n", val);
if (*endptr != '\0') /* Not necessarily an error... */
printf("Further characters after number: %s\n", endptr);
exit(EXIT_SUCCESS);
}