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

时间:2015-12-12 11:46:10

标签: c string

我正在使用GNU GCC编译器在代码块编辑器中编码。我试图使用函数strtod以下原型:

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

如果我使用以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
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 个答案:

答案 0 :(得分:9)

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

订购评估:

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

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