c - 奇怪的 sqlite 数据库字符串文件路径错误

标签 c string sqlite

因此,我打算使用 sqlite3 更新 skype 的 main.db 文件。

我使用 sqlite3_open 函数打开这样的连接。

int rc = sqlite3_open(filepath,db);

我正在尝试动态处理文件路径字符串,但一个奇怪的错误让我抓狂。

我有两个字符串 szFile 和 szFilePath,szFile 是一个测试字符串,它将包含 db 文件的实际路径,而 szFilePath 只是这次由函数动态生成的相同字符串。

事情就在sqlite3_open函数执行之前,你在截图上看到的两个字符串是相同的,我什至贴出内存给你看。

看图片: Picture 1 Picture 2

现在,尽管完全相同,但无论我运行此代码多少次,只有 szFile 有效,而另一个给我“无法打开文件路径”错误,让我完全困惑。另外,如果这是正常的,我不会拒绝,但是通过在下一个 if 处设置断点,我可以看到 szFilePath 失去了它的值(填充了 c 十六进制值)。

有什么问题吗?

最佳答案

您正在返回一个指向栈上数组的 char* - 一旦您从函数 szGetFilePath 返回,这个指针很可能指向junk(它肯定会在几个级别的额外调用之后指向 junk - 当堆栈上的值被覆盖时)。

您可以从函数返回一个动态分配的 char 数组(即 malloced)(记住稍后要free),或者传递一个指向通过 char 数组到 szGetFilePath 并将字符数据放入其中。

关于c - 奇怪的 sqlite 数据库字符串文件路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244807/

相关文章:

c - 使用 select 以非阻塞模式打开 fifo

c++ - 当我在 Dev C++ 中编译和运行时程序崩溃

java - 使用snakeYaml解析字符串数组

javascript - 使用避免 "\n"JavaScript 进行字符串分割

java - Android - 没有可用的默认构造函数

c - 使用 STRCPY C

java - 邮件内容需要用字典里的词过滤掉

python - Flask 安全文本渲染用户生成的 block

c - 不知道如何获取数据库?

c - 需要一些关于 C header 包含的建议