首先,使用标志 -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 传递给整数。接收 %d
的 printf
正在查找一个从未设置的寄存器,因此您看到的是之前某个操作遗留下来的任何值。
这实际上很常见,here is an example - %esi
用于int
,%xmm0
用于浮点值。
关于c - strtof() 在 C 中产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28757975/