gpt4 book ai didi

c - 来自 David M. Gay 的 dtoa.c 的 strtod() 函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:17 24 4
gpt4 key购买 nike

我正在使用来自 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);
}

关于c - 来自 David M. Gay 的 dtoa.c 的 strtod() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com