- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在获取 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/
我需要将字符串转换为 float 。如果字符串不是数字,我希望返回 0。 我尝试使用以下代码测试 atof() 函数是否适用于此: printf("%f", atof("1a")); 根据我对atof
我写了一个atof函数,名为atof_beta。我运行它,但结果与atof的结果不一样。 例如:输入:1111111111111111111111111111111111111111111111111
我的 Atof 功能有问题。我正在尝试将字符串转换为 float ,但当我在 Coocox 软件的“调试”部分中尝试时,它没有给出任何错误,输出没有显示任何内容。我尝试了两个函数Atoi和Atof。当
示例.c: #include #include main() { char str[10] = "111.1"; float f = (float)atof(str); pri
我试图使用 atof() 将字符串转换为 double (显然),但结果不是我所期望的。以下是 atof() 之前有关变量值的代码和调试信息: d = atof (arg); next.db = d;
输入文件应以后缀顺序指定单个代数表达式,支持正浮点值和负浮点值以及以下运算:加法 (+)、减法 (-)、乘法 (*)、除法 (/)。所有浮点值和操作都应以空格分隔。我必须扫描以下行: 4 5 + 20
我有一个问题基本上让我感到困惑。首先,我有两个全局数组 - trustArray[] 和 fashionArray[]。这是填充 trustArray 的函数: void getTrust() {
我有一个例程,它获取指数格式的数字(例如 2,5E-02 或 4E+06)作为 QString。当我打印值时,我总是只得到整数,当它们小于 1 时,我总是得到 0。有谁知道我在这里做错了什么?(对于
我正在使用一个库将 Wavefront .obj 文件加载到我的 OpenGL 应用程序中 (tinyobjloader)。我注意到加载对象时出错。当我加载一个坐标为例如的对象时。 0.9999999
在我的 C++ 程序中,我需要创建一个名为 ComplexNumber 的类来保存复数的信息。我已经在头文件中编写了所有函数,并将这些函数移到了 .cpp 文件中。 我当前程序的 atof 函数不起作
我继承了一些代码(从已经离开的人那里)并找到了这个小片段: double minX = xVal.find('.') == string::npos ? (double)atoi(xVal.c_str
我似乎遇到了一些奇怪的问题,atof() 函数无法正确转换某些值。对于相同的值,atoi() 完美运行。 这是我正在做的事情的一小段: ... // frequencies is a std::str
我的问题如下。我尝试将字符串转换为 double 。这样: string str = "1.1"; double d = atof(str.c_str()); 但这不起作用,它只是返回 1; 但如果我
比如说,我有一个(德语)表达式,它显示为 10.401,40(in Mio EUR),我想将其转换为真正的 float (在本例中约为 100 亿) python 。 这是我到目前为止所拥有的: im
所以我使用 atof 将我的字符串转换为 double 。但我需要知道我是否输入错误(如 y564 等)。我怎样才能检查它?我需要正确的号码才能对其进行进一步操作。 double x = atof(s
using namespace std; int main(int argc, char *argv[]) { char c[] = {'0','.','5'}; //char c[]
我正在尝试使用 atof 在 c 语言中将字符数组转换为 double 组并接收不明确的输出。 printf("%lf\n",atof("5")); 打印 262144.000000 我惊呆了。有人可
我正在解析固定 NMEA 句子中的 GPS 状态条目,其中地理分钟的一小部分总是在句点之后。但是,在语言环境将逗号定义为小数分隔符的系统上,atof 函数会忽略句点和整数部分。 处理此问题的最佳方法是
我有一个 Arduino,它从我的智能手机(通过蓝牙)接收一条包含 unix 时间戳的消息。现在,我正在尝试将我的 DS1307 与该时间戳同步。 但是,它不起作用,因此,我开始搜索并在将包含时间戳的
我想我只是太笨了(我都试过了)。帮我离开这里: #include #include int main() { const char * y = "747.0"; double x;
我是一名优秀的程序员,十分优秀!