いくつかのベンダー コードを見ていると、次のようなクエリがあります。
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 つの興味深い問題は、ベンダーがそれを再現できなかったことです。幸運?