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

时间:2015-02-27 05:14:00

标签: c string floating-point token

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

基本上我的代码工作正常,但是当我使用strtof()

将字符串从字符串转换为浮点数时返回非常奇怪和意外的结果

下面的代码部分是:

 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”但在几次迭代后它返回一个非常长的一致数字。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

问题出在这里,假设unitPricefloat

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

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


您看到的更改值的可能解释可能是您的系统将浮动在另一个寄存器中传递给整数。 printf接收%d正在寻找一个从未设置过的寄存器,因此您可以看到之前某些操作遗留下来的任何值。

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

答案 1 :(得分:-1)

你必须处理溢出案例。调用strtof()后检查errno是否有溢出。如果您认为这些值可能很长,则可以使用doublelong double