在函数

时间:2016-03-12 20:19:22

标签: c++ sqlite

我正在尝试将字符串传递给使用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 问题可能与提到的有关解决方案的问题重复,但问题的症状表现得如此完全不同,以至于我在搜索时没有找到其他问题。

0 个答案:

没有答案