将字符串转换为双精度浮点数

4

我正在尝试将一个字符串(const char* argv[])转换为双精度浮点数:double

int main(const int argc, const char *argv[]) {
    int i;
    double numbers[argc - 1];
    for(i = 1; i < argc; i += 1) {
        /* -- Convert each argv into a double and put it in `number` */
    }
    /* ... */
    return 0;
}

有人能帮我吗?谢谢


1
糟糕!不行。您想将一个由const char*指向开头的字符串转换为double。 - Maciej Hehl
1
@Maciej:每个有经验的C程序员都知道const char*99.9%是一个字符串。 - kennytm
@Kenny:如果它是main函数的第二个参数,那当然可以。 - user142019
2
哦,我只是有一个“做蠢事的日子”,我想。我就是忍不住。 - Maciej Hehl
4个回答

9

使用sscanf(参考)

来进行操作。

sscanf(argv[i], "%lf", numbers+i);

or strtod (Ref)

numbers[i] = strtod(argv[i], NULL);

BTW,

for(i = 1; i < argc, i += 1) {
//-----------------^ should be a semicolon (;)

-->


strtod完成了任务。谢谢 =D - user142019
哦,而逗号 , 而不是分号 ; 是一个打字错误。 - user142019

1

1
现在使用更安全的strtod,没有使用atof的真正理由了。 - Martin Beckett

1

你可以使用在stdlib.h中定义的strtod

理论上,它应该比scanf系列函数更高效,尽管我认为这不会被测量出来。


0

您没有说明const char*的格式可能是什么。假设它们是像"1.23"这样的文本字符串,那么sscanf(argv[i], "%lf", &numbers[i-1])应该可以完成工作。


我想我是在指普通记数法和科学记数法之间的区别。 - crazyscot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接