0

我正在使用 sqlite3 为我的程序在 C 中创建一个单词列表搜索器,但我遇到了这些错误
我尝试了我所知道的一切,但没有解决。我想问题出在我的加入功能中,但我不确定。

代码 :

bool *gb_wordlist_add_to_list (gbwordlist *word_list,char *str)
{
int sql_error;
char *error_massage;
if (gb_wordlist_in_list (word_list,str))
    {
    sql_error = sqlite3_execute(word_list->database, gb_wordlist_join(ADD_TO_TABLE_COMMAND"\'",str,"\';"),
                                NULL ,NULL, &error_massage);    
    if( sql_error!=SQLITE_OK )
    {
        fprintf(stderr, "SQL error: %s\n", error_massage);
        sqlite3_free(error_massage);
        return 0;
    }

    }
else
    return 0;

}


char *gb_wordlist_join (char *s1,char *s2,char *s3){
char *s;
s = malloc(strlen(s1) + strlen(s2) + strlen(s3) + 1);
if(s)
{
    strcpy(s,s1);
    strcat(s,s2);
    strcat(s,s3);
}
return s;
}

错误:

gb-sql.o: In function `gb_wordlist_remove_from_list':
/home/reza/Project/GB/Search algorithm/Source/gb-search/src/gb-sql.c:104: undefined reference to `sqlite3_execute'

我的完整代码也在这里。非常感谢!

4

1 回答 1

1

您获得未定义引用的原因是sqlite3_execute库中没有这样的功能。您可能打算使用sqlite3_exec(在代码的某些部分中使用了哪些使用)。
旁注:

  1. 该函数gb_wordlist_callback正在返回int,但已声明为 return int*。您应该将返回类型更改为int以匹配要传递给的预期参数sqlite3_exec(修改 from 之后sqlite3_execute
  2. 传递给sqlite3_exec(修改 from 之后sqlite3_execute)的第四个参数预计应该是void*这样existance&existance
  3. 您有很多函数声明的返回类型与函数返回的实际返回类型不匹配。
  4. 使用编译器选项编译代码并-Wall -Wextra修复所有警告。这是一个很好的做法。

希望这可以帮助!

于 2012-05-17T17:58:24.293 回答