我是使用 c 开发的新手。果然有一天我需要你的帮助。我想现在是现在:)
我正在尝试做的事情:我正在用 C 语言试验 MySQL Api。为此,我想使用一个结构来保存我的 SQLQuery 及其所有参数,例如用于选择或插入的用户数据。
然后使用几个函数,我想添加、删除和编译字符串以在查询中使用它。
要使用我的 createSqlQuery 函数,我想将对我的 SQLQuery 结构的引用传递给它并在函数中更改它。在该函数结束后,它不应该超出范围并且仍然可以在主函数中使用。
那就是我目前被困的地方。我想我的问题很简单,但是在看了几个小时并尝试了它之后,我有点盲目地看不到解决方案。使用这个问题:将结构的指针/引用传递给函数我终于碰巧有一个工作代码,该结构在创建函数结束后仍然可用。
但由于某种原因,我无法进一步编译我的代码,因为它无法为我的结构分配一些东西。
错误信息:
main.c:127:10:错误:请求成员“addParam”不是结构或联合
这发生在在创建函数中添加第二个 * 以获取指向指针的指针之后(请参阅其他 stackoverflow 问题)。
这是我到目前为止所拥有的:
typedef struct sqlQuery sqlQuery;
struct sqlQuery{
char *queryS;
char **params; //array of array of chars to hold the params to replace %? in the query
bool (*addParam)(sqlQuery*, char*);
bool (*compile)(sqlQuery*);
};
int main(){
/* ... */
sqlQuery *testQuery = NULL;
printf("%p\n", &testQuery);
printf("%p\n", testQuery);
createSqlQuery(&testQuery,"SELECT * FROM test WHERE name = '%?'");
printf("%p\n", testQuery);
if (testQuery != NULL) printf("working, testQuery still assigned");
//testQuery->addParam(testQuery, "test");
//freeSqlQuery(testQuery);
exit(EXIT_SUCCESS);
}
bool createSqlQuery(sqlQuery **query, char *queryString){
*query = (struct sqlQuery *) malloc(sizeof(struct sqlQuery)); //get heapspace for sqlQuery Struct
printf("%p\n", *query);
//query->addParam = __sqlQueryAddParam; //link param function pointer
//query->compile = __compileSqlQuery; //link compile function pointer
*query->queryS = queryString; //save pointer to query String
//^^^ this is where the error occurs
return true;
}
我还尝试了以下组合和变体:
(sqlQuery *)*query->queryS = queryString;
带 ** 或 &...
我希望你能得到我正在努力的东西,我想这很简单,但我似乎真的无法弄清楚:)
提前致谢!