我使用C++和SQLite3(使用Microsoft Visual C++ 2008)並希望從我的數據庫中讀取值並將其存儲在變量中以使用它。 select語句可以正常工作,但每次查看回調函數並嘗試從char ** argv讀取值時,我都會得到「僅」內存地址或數據庫中值的第一個ASCII字符。我究竟做錯了什麼? 這裏是回調函數:C++,SQLite - 指向字符串的指針的指針
static int callback(void *pArg, int argc, char **argv, char **azColName)
{
fprintf(f, "Callback aufgerufen!\n");
int i;
for(i=0; i<argc; i++)
{
fprintf(f, azColName[i]);
fprintf(f, " = ");
if(argv[i]){
fprintf(f, argv[i]);
//unsigned int x = argv[i];
}
else
fprintf(f, "NULL");
fprintf(f, "\n");
}
fprintf(f, "\n");
return 0;
}
我試了一下沒有回調函數,但我再次得到相同的結果,我已經嘗試了不同的方式存儲在一個變量的值。
while (sqlite3_step(stmt) == SQLITE_ROW)
{
fprintf(f, "%s\n", sqlite3_column_text(stmt, 0));
//const unsigned char *c = sqlite3_column_text(stmt, 0);
fprintf(f, "%u\n", sqlite3_column_int(stmt, 0));
//unsigned int z = *sqlite3_column_int(stmt, 0);
stmt_count++;
}
可能無法訪問該值或將其存儲在變量中嗎?
注意,通過任意的字符串作爲fprintf'的'第二個參數(或'printf'的第一個參數)是一個非常糟糕的主意,可能導致各種可怕的腐敗或漏洞。 – 2011-04-28 07:21:11