问题描述
我知道 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;
}