我正在尝试使用modf函数,但它无法正常工作,它不会对变量进行必要的部分
float intp;
float fracp;
float x = 3.14;
fracp = modf(x,&intp);
printf("%f %f\n", intp,fracp);
会给我0.00000 0.14000
我做错了什么?
答案 0 :(得分:2)
您将&intp
(float *
)传递给需要double *
的参数。这会导致未定义的行为。您需要使用modff
:
fracp = modff(x,&intp);
或者intp
改为double
:
double intp;
你会没事的。
您应该在编译器中打开更多警告。例如,即使没有特殊标志,clang也会给出:
example.c:9:20: warning: incompatible pointer types passing 'float *' to
parameter of type 'double *' [-Wincompatible-pointer-types]
fracp = modf(x,&intp);
^~~~~
/usr/include/math.h:400:36: note: passing argument to parameter here
extern double modf(double, double *);
^
1 warning generated.
为您的计划。
查看modf
and modff
man page,看看你哪里出错了。