2014-01-10 137 views
0

任何想法如何追查這個錯誤,將不勝感激。鏗鏘sqlite3浮動錯誤

我有一些在兩個或多個進程中運行的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; 
} 
+0

請顯示'sqlite3_bind_double'周圍的確切代碼。 –

回答

0

這是諸如此類的事情,我希望從一些試圖讀取一個四字節浮點作爲八字節雙,與其他四個字節是......嗯,不管。這真的不應該,但如果你把第三個參數明確地轉換成(double)flt_var,這有幫助嗎?