gpt4 book ai didi

c - HPUX atof 不会将字符串转换为 double

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

我正在获取 hpux 机器的版本号并尝试使用 atof 将其转换为 float ,但发生了这种情况:

#include <stdio.h>
#include <sys/utsname.h>

int main(int argc, char *argv[]) {
struct utsname u;
uname(&u);
char* release = u.release;
while (*release != '.')
release++;
release++;
printf("%s\n", release);
printf("%f\n", atof(release));
}

打印这个:

# ./test
11.31
0.000000

返回double 0 表示转换失败。 utsname 手册页说字符串以空值终止,所以我不明白为什么 atof 命令失败。我在这里犯了一些明显的错误吗?

最佳答案

atof函数在 <stdlib.h> 中声明.

如果你在没有必要的 #include <stdlib.h> 的情况下调用它,最有可能的结果是 (a) 您的编译器将打印一条警告(您显然已忽略),并且 (b) 编译器将假定 atof返回 int结果。

添加

#include <stdlib.h>

到源文件的顶部。并注意编译器警告。如果您没有收到警告,请找出如何以一种方式调用您的编译器,使其对此类事情发出警告。 (我不知道您使用的是什么编译器,所以我无法提供具体信息。) 对于 gcc,您使用的编译器是 -Wall选项将启用此警告。

一些背景:

在 ISO C 标准的 1999 版之前,允许调用没有可见声明的函数。编译器将假设该函数接受调用中传递的(提升的)类型的参数,并且它返回类型为 int 的结果。 .如果函数确实返回 int,这通常会正常工作。 ,并且如果您正确编写了调用(并且该函数不是可变的,例如 printf )。

标准的 1999 版本(“C99”)放弃了“隐式 int”规则,使对没有可见声明的函数的任何调用都成为约束违规,需要诊断(可以是非致命警告)。许多编译器只会警告错误,然后根据旧规则处理调用。而且 gcc 默认情况下仍然不执行 C99 规则;它的默认方言是“GNU90”,由 1990 ISO C 标准加上特定于 GNU 的扩展组成。您可以要求它使用带有“-std=c99”的 C99 语义;要强制这些语义,您可以使用“-std=c99 -pedantic”或“-std=c99 -pedantic-errors”。

如果您指定“-std=c11”,较新版本的 gcc(部分)支持最新的 2011 标准。

参见 the gcc 4.8.2 manual了解详情。

关于c - HPUX atof 不会将字符串转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203426/

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