【问题标题】:exception thrown with sqlite select statementsqlite select 语句引发的异常
【发布时间】:2016-08-18 08:17:20
【问题描述】:

我愿意访问我的 SQLite 数据库的列中存在的特定元素,所以为了实现这一点,我使用了一个 select 语句

char *query = {0};
            strcat(query, "SELECT ");//exception thrown here
            strcat(query, (char*)arr);//The value to be asscessed
            strcat(query, " FROM CARS");

但这会在 ucrtbased.dll 中抛出异常,为什么?

更新

我已经参考了这个答案here 并尝试了这个char* line1 = "SELECT "; char* line2 = (char*)arr; char* line3 = " FROM CARS"; size_t len1 = strlen(line1); size_t len2 = strlen(line2); size_t len3 = strlen(line3); char *query = (char*)malloc(len1 + len2 + len3 + 1); if (!query) abort(); memcpy(query, line1, len1); memcpy(query + len1, line2, len2); query[len1 + len2 + len3] = '\0';

但我发现我做错了什么(因为 out put 跳转到 else 语句,这意味着无效的 sqlite 语句)我无法弄清楚请帮助我。

我也参考了本教程@ cplusplus.com,但无法弄清楚 谢谢

【问题讨论】:

    标签: c++ sqlite


    【解决方案1】:

    您没有为query 分配任何内存并试图将一些字符复制到其中。如果大小已知,您可以在堆栈上创建一个变量,例如 char query[256] = {0};。否则,您可以使用new[] 动态分配内存并使用delete[] 释放它。

    【讨论】:

    • 那么,我应该使用malloc吗?查询变量?谢谢
    • @user105127:更新答案。
    • 使用std::string 然后用.c_str() 吐出一个char* 不是更好吗?您可以避免分配内存、释放内存并获得更简单的引导连接。
    • @enhzflep:c_str() 返回const char*。你不能修改它的内容。如果真的需要可以使用std::vector<char>
    • @enhzflep:是的,你是对的(我不知道我在想什么 :)).. 一个简单的std::string 在这里要好得多。
    猜你喜欢
    • 2020-08-22
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2023-03-18
    • 2012-07-24
    相关资源
    最近更新 更多