我正在使用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 @
发生了什么?我在哪里弄错了?
子表达式的评估顺序是未指定的,因此可以首先评估最后一个函数参数,然后最终读取未初始化的值b
,这是未定义的行为.
订购评估:
const char *a = "99.5HELLO"; char *b; double d = strtod(a, &b); printf("%.1f\n%s", d, b);