【问题标题】:Is there any difference in the way atof and strtod work?atof 和 strtod 的工作方式有什么不同吗?
【发布时间】:2021-05-02 07:21:19
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 一方面,他们采用不同的论点。你看过他们每个人的手册页了吗?你能看出论点不同吗?答案是“是”,两个功能不同。
  • @TomKarzes 我知道差异(参数数量),我想知道其他差异。
  • 那么这就是你应该问的。您实际上问的是“这两个功能之间有什么区别吗,如果有,请告诉我……”我就是这样做的。您的帖子中没有任何内容表明您知道这两个函数之间的任何差异。
  • @TomKarzes 好的,我很抱歉。
  • @AbhishekJaiswal 考虑重新表述您的问题以使其更加清晰。例如,将您的标题更改为“atof 和 strtod 的工作方式有什么不同吗?”

标签: c atof strtod


【解决方案1】:

来自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;
}

【讨论】:

  • 还有什么不同还是仅此而已?
  • @AbhishekJaiswal 据我所知,我相信就是这样。不过,您可以随意进行一些挖掘。如果你发现了什么,你甚至可以发布你自己的答案;)
猜你喜欢
  • 2014-06-20
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2012-12-25
相关资源
最近更新 更多