3

我正在使用来自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 调用会导致内存保护问题。有人知道使该功能正常工作可能需要什么吗?

4

1 回答 1

2

您将需要以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);
}
于 2013-04-04T16:11:43.253 回答