gpt4 book ai didi

c - 为什么 strtof() 的这种行为会随着 stdlib.h 的变化而变化?

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:42 25 4
gpt4 key购买 nike

<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 , 而如果不包含 header ,则假定默认值为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com