任何关于如何追踪这个错误的想法都将不胜感激。
我有一些在两个或更多进程中运行的c代码。第一个进程监听消息队列,并将结果结构保存到数据库。其余进程查询一个或多个串行设备,并通过消息队列将此信息传递给第一个进程以存储在数据库中。
除了以下几点之外,它都运行得很好。我使用的其中一个结构包含了一个浮点数。这个结构通过队列发送并正确解码,但是当使用sqlite3_bind_double()绑定值时,数据库中的结果值是0。在sqlite3_bind_double()语句周围放置一个printf()语句可以使代码正常工作,并将正确的值放入数据库中。
但更有趣的是,如果我删除printf()语句,并使用gcc编译程序,代码就可以工作了。
任何帮助都是最好的。提前谢谢。
代码:
int
add_inverter_stat(sqlite3 *db_conn, struct inverter_stat const *istat
,int *sqlite3_err)
{
sqlite3_stmt *stmt = NULL;
*sqlite3_err = sqlite3_prepare_v2(db_conn, SQL_INSERT_INVERTER_STAT, -1
,&stmt, NULL);
*sqlite3_err = sqlite3_bind_int(stmt, 1, istat->stat_id);
*sqlite3_err = sqlite3_bind_text(stmt, 2, istat->serial_no, -1, NULL);
*sqlite3_err = sqlite3_bind_int64(stmt, 3, istat->time_taken);
*sqlite3_err = sqlite3_bind_double(stmt, 4, (double)istat->value);
*sqlite3_err = sqlite3_step(stmt);
sqlite3_finalize(stmt);
return 1;
}发布于 2014-01-10 10:27:57
这就是我在尝试将一个4字节的浮点型读取为一个8字节的双精度型时所期望的事情,其他4个字节是...好吧,管他呢。这真的不应该起作用,但是如果你把一个显式的强制转换(double)flt_var作为第三个参数,这会有帮助吗?
https://stackoverflow.com/questions/21034990
复制相似问题