gpt4 book ai didi

c - Sqlite3 和 C,用回调填充结构

转载 作者:行者123 更新时间:2023-11-30 15:21:12 25 4
gpt4 key购买 nike

我对 Sqlite 的使用很陌生,我想使用 exec 函数中的回调来填充结构(使用第四个参数作为指向结构的指针)

我已经尝试过:

static int buildHost(void * pHost, int argc, char **argv, char **azColName){
int i;
struct host* host = malloc(sizeof(struct host));
struct snmp_info* inf = malloc(sizeof(struct snmp_info));
host->info = inf;
for(i=0; i<argc; i++){
if(strcmp(azColName[i], "ip") == 0)
host->ip = argv[i] ? argv[i] : NULL;
else if (strcmp(azColName[i], "port") == 0)
host->info->port = argv[i] ? argv[i] : NULL;
else if (strcmp(azColName[i], "community") == 0)
host->info->community = argv[i] ? argv[i] : NULL;
else if (strcmp(azColName[i], "SNMPv") == 0)
host->info->SNMPv = argv[i] ?atoi( argv[i] ) : 0;
else if (strcmp(azColName[i], "auth_protocol") == 0)
host->info->auth_protocol = argv[i] ? argv[i] : NULL;
else if (strcmp(azColName[i], "password") == 0)
host->info->password = argv[i] ? argv[i] : NULL;
else if (strcmp(azColName[i], "encryption") == 0)
host->info->encryption = argv[i] ? argv[i] : NULL;
else if (strcmp(azColName[i], "encryption_passwd") == 0)
host->info->encryption_passwd = argv[i] ? argv[i] : NULL;
}

pHost = &host; //Seems to be the problem line

printf("\n");
return 0;
}

我这样称呼这个函数:

struct host* toRet;
sqlite3_exec(db, request, buildHost, &toRet,0);

我要补充一点,我的代码已编译,如果我在回调函数中执行一些 printf 操作,我将获得良好的数据(我在一个键上进行了选择,因此我只能有一个答案或没有答案)但是当我尝试在调用函数中执行

printf("%s", toRet->ip); 

我遇到了段错误

预先感谢,对于使用该库的人来说可能很容易,但我不是,而且我发现的每个教程都不使用回调的第一个参数

祝你有美好的一天

最佳答案

我不知道那个特定的 API,但是

pHost = &host;

您正在返回局部变量的地址。调用返回后将被销毁。您可能想要的是

* (struct host *) pHost = host

因为这已经是一个指针。

关于c - Sqlite3 和 C,用回调填充结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29629910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com