首先,使用标志-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”但在几次迭代后它返回一个非常长的一致数字。有什么帮助吗?
答案 0 :(得分:3)
问题出在这里,假设unitPrice
是float
:
printf("price is %d\n", newstockdata->unitPrice);
要打印float
,您必须使用%f
说明符。否则,它是未定义的行为,任何事情都可能发生。
您看到的更改值的可能解释可能是您的系统将浮动在另一个寄存器中传递给整数。 printf
接收%d
正在寻找一个从未设置过的寄存器,因此您可以看到之前某些操作遗留下来的任何值。
实际上这很常见,here is an example - %esi
用于int
,%xmm0
用于浮点值。
答案 1 :(得分:-1)
你必须处理溢出案例。调用strtof()
后检查errno
是否有溢出。如果您认为这些值可能很长,则可以使用double
或long double
。