Clang sqlite3浮点错误

标签 c sqlite clang

任何关于如何追踪此错误的想法将不胜感激。

我有一些在两个或多个进程中运行的 C 代码。第一个进程监听消息队列并将结果结构保存到数据库中。其余进程查询一个或多个串行设备,并将这些信息通过消息队列传递给第一个进程存储在数据库中。

除了以下内容之外,一切都很好。我正在使用的结构之一包含一个 float 。该结构通过队列发送并正确解码,但是当使用 sqlite3_bind_double() 绑定(bind)值时,数据库中的结果值为 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;
}

最佳答案

这就是我所期望的那种尝试将四字节浮点读取为八字节 double 的东西,而其他四个字节是......好吧,无论如何。这确实不应该起作用,但是如果您将显式转换 (double)flt_var 作为第三个参数,这有帮助吗?

关于Clang sqlite3浮点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034990/

相关文章:

c++ - Clang 10 无法在 macOS 10.12 上将 C++ 应用程序与 CMake 链接

c - Linux:使用管道在进程之间发送信息

c - 为什么 scanf ("%c", &ch ) 不从控制台读取字符,而 scanf ("%c", &ch ) 会

c++ - strncpy 文档问题

android - 按项目过滤 SQLite 数据库 "popularity"- Android

数据库设计(库存数据库)

objective-c - ObjC ARC收缩(c铛崩溃)

c++ - 如何在 C 语言中通过按键退出 while 循环?

sql - UNION查询中的“附近错误”

c++ - OSX Mojave-ld:找不到架构x86_64铛的符号:错误:链接器命令失败,退出代码为1