1

いくつかのベンダー コードを見ていると、次のようなクエリがあります。

BOOL BindQuery(sqlite3_stmt* stmt, PARAMS* params)
{
    char temp[150] = "";
    char paramBuf[10] = "";
    if (currStmt == NULL) return FALSE;

    sprintf(paramBuf, "%d", (int)params->someParam);
    strcpy(temp, "%");
    strcat(temp, tempVolt);
    strcat(temp, "%");
    sqlite3_bind_text(stmt, 4, temp, strlen(temp), SQLITE_STATIC);
    return TRUE;
}

後でそのクエリが実行されます。問題は、このクエリが一致する必要があるにもかかわらず、一致しないことです。

問題はsqlite3_bind_text、ローカル変数をバインドし、SQLite が元のローカル変数へのポインターを保持していることだと思います。そのため、範囲外になると、すでに上書きされている可能性があります。修正はSQLITE_TRANSIENT代わりに使用するようです。誰かが私の考えを確認できますか? それとも私は基地外ですか?

もう 1 つの興味深い問題は、ベンダーがそれを再現できなかったことです。幸運?

4

2 に答える 2