因此,我打算使用 sqlite3 更新 skype 的 main.db 文件。
我使用 sqlite3_open 函数打开这样的连接。
int rc = sqlite3_open(filepath,db);
我正在尝试动态处理文件路径字符串,但一个奇怪的错误让我抓狂。
我有两个字符串 szFile 和 szFilePath,szFile 是一个测试字符串,它将包含 db 文件的实际路径,而 szFilePath 只是这次由函数动态生成的相同字符串。
事情就在sqlite3_open函数执行之前,你在截图上看到的两个字符串是相同的,我什至贴出内存给你看。
现在,尽管完全相同,但无论我运行此代码多少次,只有 szFile 有效,而另一个给我“无法打开文件路径”错误,让我完全困惑。另外,如果这是正常的,我不会拒绝,但是通过在下一个 if 处设置断点,我可以看到 szFilePath 失去了它的值(填充了 c 十六进制值)。
有什么问题吗?
最佳答案
您正在返回一个指向栈上数组的 char* - 一旦您从函数 szGetFilePath
返回,这个指针很可能指向junk(它肯定会在几个级别的额外调用之后指向 junk - 当堆栈上的值被覆盖时)。
您可以从函数返回一个动态分配的 char 数组(即 malloc
ed)(记住稍后要free
),或者传递一个指向通过 char 数组到 szGetFilePath
并将字符数据放入其中。
关于c - 奇怪的 sqlite 数据库字符串文件路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244807/