atof 和 strtod 的工作方式有什么区别吗?

Is there any difference in the way atof and strtod work?

我知道 strtod()atof() 函数用于从字符串到双精度的转换。

但是我搞不懂这两个函数的区别

这两个函数有什么区别吗,如果有请告诉我...

提前致谢。

来自man page on double atof(const char *nptr)

The atof() function converts the initial portion of the string pointed to by nptr to double. The behavior is the same as

    strtod(nptr, NULL);

except that atof() does not detect errors.

为什么它不能检测错误?好吧,因为 double strtod(const char *nptr, char **endptr) 的第二个参数用于指向最后一个无法转换的字符,所以您可以相应地处理这种情况。如果字符串已成功转换,endptr 将指向 [=19=]。对于 atof,它设置为 NULL,因此没有错误处理。

错误处理示例 strtod:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const char *str = "1234.56";
    char *err_ptr;
    double d = strtod(str, &err_ptr);
    if (*err_ptr == '[=11=]')
        printf("%lf\n", d);
    else
        puts("`str' is not a full number!");

    return 0;
}