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;
}
我知道 strtod()
和 atof()
函数用于从字符串到双精度的转换。
但是我搞不懂这两个函数的区别
这两个函数有什么区别吗,如果有请告诉我...
提前致谢。
来自man page on double atof(const char *nptr)
:
The
atof()
function converts the initial portion of the string pointed to bynptr
todouble
. The behavior is the same asstrtod(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;
}