Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite3编程已获得“;“内存不足”;在LinuxC中_C_Database_Linux_Sqlite - Fatal编程技术网

sqlite3编程已获得“;“内存不足”;在LinuxC中

sqlite3编程已获得“;“内存不足”;在LinuxC中,c,database,linux,sqlite,C,Database,Linux,Sqlite,我的代码很简单,只需创建一个空表。这是我的代码: #include <stdio.h> #include <stdlib.h> #include <sqlite3.h> int main(int argc, char *argv[]) { sqlite3 *ppdb; int retval; retval = sqlite3_open_v2("v2.db", &ppdb, S

我的代码很简单,只需创建一个空表。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

int main(int argc, char *argv[])
{
    sqlite3 *ppdb;
    int retval;

    retval = sqlite3_open_v2("v2.db", &ppdb, 
                        SQLITE_OPEN_CREATE, "unix-none");
    if (retval != SQLITE_OK)
    {
        printf(stderr, "%s\n", sqlite3_errmsg(ppdb));
        return 1;
    }
    retval = sqlite3_exec(ppdb, 
             "CREATE TABLE IF NOT EXISTS userinfo \
             (id TEXT PRIMARY KEY, pass TEXT NOT NULL)",
             NULL, NULL, NULL);
    if (retval != SQLITE_OK)
    {
        fprintf(stderr, "%s\n", sqlite3_errmsg(ppdb));
        return 1;
    }
    sqlite3_close(ppdb);
    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
sqlite3*ppdb;
内部检索;
retval=sqlite3\u open\u v2(“v2.db”)和ppdb,
SQLITE_OPEN_CREATE,“unix none”);
如果(retval!=SQLITE_OK)
{
printf(stderr,“%s\n”,sqlite3_errmsg(ppdb));
返回1;
}
retval=sqlite3_exec(ppdb,
“如果不存在,则创建表userinfo\
(id文本主键,传递文本不为空)”,
空,空,空);
如果(retval!=SQLITE_OK)
{
fprintf(stderr,“%s\n”,sqlite3_errmsg(ppdb));
返回1;
}
sqlite3_关闭(ppdb);
返回0;
}
但当我运行它时,我收到了以下错误消息:

内存不足

我调试了这段代码,发现
sqlite3\u open\u v2
返回了
21
(库使用不正确)

如何解决它?

来自:

sqlite3\u open\u v2()
flags
参数可以采用以下三个值之一[…]:

SQLITE\u OPEN\u READONLY

数据库以只读模式打开。如果数据库不存在,则返回一个错误

SQLITE\u OPEN\u READWRITE

如果可能,将打开数据库进行读写,或者仅当文件受操作系统写保护时才进行读写。在这两种情况下,数据库必须已经存在,否则将返回错误

SQLITE\u OPEN\u READWRITE\SQLITE\u OPEN\u CREATE

将打开数据库进行读写操作,如果数据库尚不存在,则会创建该数据库。这是总是用于
sqlite3\u open()
sqlite3\u open16()
的行为

因此,不能只使用
SQLITE\u OPEN\u CREATE
,如果要创建文件,需要包含
SQLITE\u OPEN\u READWRITE
位:

retval = sqlite3_open_v2("v2.db", &ppdb,
                    SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, "unix-none");