我使用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);
}