c - strtof() 在 C 中产生奇怪的结果

标签 c string floating-point token

首先,使用标志 -Wall、-ansi、-pedantic 进行编译。没有警告或错误。并且没有任何调试有帮助。

基本上我的代码工作正常但是当我使用 strtof() 将标记从字符串转换为 float 时返回非常奇怪和意外的结果

下面的代码部分是:

 printf("token is %s\n", token);
 newstockdata->unitPrice = strtof(token, NULL);
 printf("price is %d\n", newstockdata->unitPrice);

newstockdata 被分配到正确的大小:unitPrice 是一个浮点变量:第一个 printf 语句打印“150.00”:第二个 printf 语句打印“0”,但在几次迭代后它返回一个非常长的一致数字。有什么帮助吗?

最佳答案

问题就在这里,假设unitPrice是一个float:

printf("price is %d\n", newstockdata->unitPrice);

要打印float,您必须使用%f 说明符。否则,这是未定义的行为,任何事情都可能发生。


对于您看到的不断变化的值,一个可能的解释可能是您的系统将不同寄存器中的 float 传递给整数。接收 %dprintf 正在查找一个从未设置的寄存器,因此您看到的是之前某个操作遗留下来的任何值。

这实际上很常见,here is an example - %esi 用于int%xmm0 用于浮点值。

关于c - strtof() 在 C 中产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28757975/

相关文章:

c - 使用 GtkGLArea 的 OpenCL/OpenGL 互操作

c - 机器内存地址的内存地址? (C语言)

c++ - 我是否需要在所有绘图代码之后重复 glOrtho 调用?

C 将 char** 指向另一个起始位置?

c - 构建我自己的 scanf 函数

java - 知道字符串中确定位置的数字 - Java

swift - 是否可以在 Swift 中编写一个失败的字符串编写器?

c++ - 如何找到最近的下一个/上一个 double 值(numeric_limits::epsilon 对于给定的数字)

math - 为什么十进制数不能用二进制精确表示?

math - 为什么浮点运算在添加小数时不能给出准确的结果?