Sqlite3,我不明白为什么我的指针返回为空
Sqlite3, I don't understand why my pointer is returned nulled
我正在编写一个打开数据库的函数,到目前为止它是这样的:
bool
Sqlite3::openDB(std::string filename, sqlite3* db)
{
std::ifstream file ( filename.c_str() );
if( !file )
{
std::cerr << "Can't open database, file not found. " << std::endl;
return false;
}
file.close();
if( sqlite3_open(filename.c_str(), &db) )
{
std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return false;
}
std::cout << (int)db << std::endl; // added to check the pointer (3)
return true;
}
在 main() 中:
int main(int argc, char **argv)
{
sqlite3 *db = nullptr;
std::cout << (int)db << std::endl; // (1)
// Open Database
sqlite3_engine.openDB("./bedrock.db",db);
std::cout << (int)db << std::endl; // (2)
/*...*/
}
在 (1) 处我得到空值,在 (3) 处我得到一些非空值但在 (2) 处我得到一些空值但我不明白为什么...
函数参数按值传递。 openDB()
获取 db
变量的 copy,修改副本并打印。原变量没有修改。
如果要修改参数,按引用传递(例如 sqlite3 *&
)。
我正在编写一个打开数据库的函数,到目前为止它是这样的:
bool
Sqlite3::openDB(std::string filename, sqlite3* db)
{
std::ifstream file ( filename.c_str() );
if( !file )
{
std::cerr << "Can't open database, file not found. " << std::endl;
return false;
}
file.close();
if( sqlite3_open(filename.c_str(), &db) )
{
std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return false;
}
std::cout << (int)db << std::endl; // added to check the pointer (3)
return true;
}
在 main() 中:
int main(int argc, char **argv)
{
sqlite3 *db = nullptr;
std::cout << (int)db << std::endl; // (1)
// Open Database
sqlite3_engine.openDB("./bedrock.db",db);
std::cout << (int)db << std::endl; // (2)
/*...*/
}
在 (1) 处我得到空值,在 (3) 处我得到一些非空值但在 (2) 处我得到一些空值但我不明白为什么...
函数参数按值传递。 openDB()
获取 db
变量的 copy,修改副本并打印。原变量没有修改。
如果要修改参数,按引用传递(例如 sqlite3 *&
)。