我正在尝试将字符串传递给使用sqlite3_bind_text
的函数。当我检查数据库时,字符串的第一个字符被替换为unicode NULL char(如果我正确解释每个角中包含四个零的矩形符号)。
这是一个最小的例子。函数中的cout
正确输出字符串,直接在sqlite3_bind_text
中使用main
。
#include "sqlite3.h"
#include <iostream>
using namespace std;
void bind_string_to_statement(sqlite3_stmt *& statement, const string s)
{
// These replace the first chars in first & second with [0000]...
sqlite3_bind_text(statement, 1, s.c_str(), -1, nullptr);
// ...although these look fine:
cout << s.c_str() << endl;
}
int main()
{
sqlite3 * db = nullptr;
sqlite3_open("test.sqlite", &db);
sqlite3_stmt * statement = nullptr;
string query{ "create table if not exists t(c text primary key not null)" };
sqlite3_prepare_v2(db, query.c_str(), -1, &statement, nullptr);
sqlite3_step(statement);
sqlite3_finalize(statement);
query = "insert or replace into t(c) values(?)";
sqlite3_prepare_v2(db, query.c_str(), -1, &statement, nullptr);
string s{ "stuff" };
// This fails as described in the function above...
bind_string_to_statement(statement, s);
// ...although this works fine:
// sqlite3_bind_text(statement, 1, s.c_str(), -1, nullptr);
sqlite3_step(statement);
sqlite3_finalize(statement);
sqlite3_close(db);
return 0;
}
在函数中使用sqlite3_bind_text
会出现什么问题?
/ edit 问题可能与提到的有关解决方案的问题重复,但问题的症状表现得如此完全不同,以至于我在搜索时没有找到其他问题。