atof 和 strtod 的工作方式有什么不同吗?

问题描述

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

但我无法弄清楚这两个函数间的区别。

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

提前致谢。

解决方法

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

atof() 函数将 nptr 指向的字符串的初始部分转换为 double。行为与

相同
    strtod(nptr,NULL);

除了 atof() 不检测错误。

为什么不能检测错误?好吧,因为 double strtod(const char *nptr,char **endptr) 的第二个参数用于指向最后一个无法转换的字符,因此您可以相应地处理这种情况。如果字符串已成功转换,endptr 将指向 \0。使用 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 == '\0')
        printf("%lf\n",d);
    else
        puts("`str' is not a full number!");

    return 0;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...