【发布时间】:2015-02-27 05:13:59
【问题描述】:
首先,使用标志 -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”,但经过几次迭代后,它返回一个非常长的一致数字。请问有什么帮助吗?
【问题讨论】:
-
每当我在非托管语言中读到“奇怪和意外”时,我都会立即想到未初始化的内存使用。
-
您的 printf 中有 %d(整数)。使用 %.2f 可能会更好。
-
我同意它确实看起来像,但不知道它是如何发生的
-
@RonDahlgren 仅适用于旧 ABI,其中 printf 参数在堆栈上传递。
-
与问题无关:您真的不想使用浮点数来存储与金钱有关的任何东西。从长远来看(实际上,甚至是短期的),这会给你带来不好的影响。
标签: c string floating-point token