包含<stdlib.h>
后,下面的代码将给出123.34
的输出。
#include<stdlib.h>
int main()
{
char *str="123.34";
float f= strtof(str,NULL);
printf("%f",f);
}
但如果没有
<stdlib.h>
,它将产生33.000000的输出。这里
<stdlib.h>
的作用是什么?为什么在代码中没有值33.00000时会出现它? 最佳答案
您必须查看编译器生成的警告。
warning: implicit declaration of function 'strtof' [-Wimplicit-function-declaration]
这仍然会产生结果,这在任何方面都是不确定的,因为预期的返回类型是
float
,而如果没有头包含,则默认为int
。如果你查看stdlib header file,有一个声明,
float strtof(const char *restrict, char **restrict);
对于
#include<stdlib.h>
,我们提供此声明。如果未命中,编译器将假定返回int
,因此结果是不确定的。使用我的系统,它产生
0.00000000
作为输出,而使用必要的包含,我得到123.339996
作为输出。作为预防措施,养成总是使用
-Wall
选项(假设您使用的是gcc)或更好的-Werror
选项编译代码的习惯。关于c - 为什么strtof()的这种行为相对于stdlib.h的变化而变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47690561/