[問題] sprintf 沒有確實的將值印到陣列內

看板C_and_CPP (C/C++)作者時間16年前 (2009/11/25 20:10), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我用VC2005寫一個資料庫存取程式,我用sprintf將我的指令和參數格式化得寫入一 個buff,再將此字串buff當作query送入資料庫,程式大概架構如下: main(){ MYSQL mysql; //格式化指令 char *cmd="select * from TABLE where num=%d and (time=%d or time=%d) order by TABLE_id desc"; //query字串的buff char query[128]; //將格式畫的指令和參數寫入buff sprintf_s(query,128,cmd,num,query_time,query_time-10); //下query mysql_query(&mysql,query); ... ... } 問題出在sprintf_s那行,格式中需要填入三個參數皆為%d,分別為num,query_time, query_time-10。第三個%d永遠都是0,我用debug mode下去逐步執行,不管怎麼改參數 或是格式順序,第三個%d永遠都是0。 希望得到的正確結果: 字串query應該為:select * from TABLE where num=1 and ( time= 1259140931 or time= 1259140921 ) order by TABLE_id desc 程式跑出來的錯誤結果: select * from TABLE where num=1 and ( time= 1259140931 or time= 0 ) order by TABLE_id desc; 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) win xp sp3 vc2005 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.129.25.48

11/25 20:16, , 1F
剛PO完就抓到原因了 ORZ
11/25 20:16, 1F

11/25 20:17, , 2F
%d要改成%I64d 即便使用#define _USE_32BIT_TIME_T 也沒用
11/25 20:17, 2F
文章代碼(AID): #1B3HwWI7 (C_and_CPP)
文章代碼(AID): #1B3HwWI7 (C_and_CPP)