我使用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