gpt4 book ai didi

c - SQLite SQLITE_STATIC 局部变量问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:33 25 4
gpt4 key购买 nike

我正在查看一些供应商代码并且有这样的查询:

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 绑定(bind)了一个局部变量,而 SQLite 保留了指向原始局部变量的指针。所以当它超出范围时,它可能已经被覆盖了。解决方法似乎是改用 SQLITE_TRANSIENT。谁能证实我的想法?还是我偏离了基地?

另一个奇怪的问题是供应商永远无法复制它。运气?

最佳答案

是的,这段代码是错误的。 documentation说:

If the fifth argument is the special value SQLITE_STATIC, then SQLite assumes that the information is in static, unmanaged space

但是那个局部变量不是静态的。

如果堆栈的那部分恰好在执行查询之前避免被覆盖,则此代码可能会起作用。

关于c - SQLite SQLITE_STATIC 局部变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com