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

strtof() producing weird results in C

首先,使用标志 -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”但经过几次迭代后它 returns 真的很长数一致。有什么帮助吗?

您必须处理溢出情况。调用 strtof() 后检查 errno 是否溢出。如果您认为值可能很长,可以使用 doublelong double.

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

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

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


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

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