包含<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/

10-09 05:11