当前位置:  开发笔记 > 开发工具 > 正文

为什么strtod没有以正确的方式工作?

如何解决《为什么strtod没有以正确的方式工作?》经验,为你挑选了1个好方法。

我正在使用GNU GCC Compiler编写代码块编辑器.我试图使用strtod以下原型的函数:

double strtod(const char *a, char **b);

如果我使用以下代码:

#include 
#include 
#include 
int main() {
    char *a;
    a="99.5HELLO";
    char *b;
    printf("%.1lf\n%s", strtod(a, &b), b);
    return 0;
}

我希望控制台终端在运行代码后代表这样的东西:

99.5
HELLO

但实际上我得到的是奇怪的东西:

99.5
@

发生了什么?我在哪里弄错了?



1> Kerrek SB..:

子表达式的评估顺序是未指定的,因此可以首先评估最后一个函数参数,然后最终读取未初始化的值b,这是未定义的行为.

订购评估:

const char *a = "99.5HELLO";
char *b;
double d = strtod(a, &b);

printf("%.1f\n%s", d, b);

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有