gpt4 book ai didi

c - 如何使用 C 语言将指向结构的指针传递给函数?

转载 作者:太空狗 更新时间:2023-10-29 16:13:03 25 4
gpt4 key购买 nike

我是用 c 开发的新手。果然有一天我需要你的帮助。我想现在是时候了:)

我想做的是:我正在 C 中试验 MySQL Api。为此,我想使用一个结构来保存我的 SQLQuery 及其所有参数,例如用于选择或插入的用户数据。

然后我想使用几个函数添加、删除和编译字符串以在查询中使用它。

要使用我的 createSqlQuery 函数,我想将对我的 SQLQuery 结构的引用传递给它并在函数内更改它。在该函数结束后,它不应超出范围并且仍然可以在主函数中使用。

这就是我目前卡住的地方。我想我的问题很简单,但是在查看并尝试了几个小时之后,我有点盲目地看到了解决方案。使用这个问题:Passing pointers/references to structs into functions我终于碰巧有了一个工作代码,在创建函数结束后结构仍然可用。

但由于某些原因我无法进一步编译我的代码,因为它无法为我的结构分配一些东西。

错误信息:

main.c:127:10: error: request for member ‘addParam’ in something not a structure or union

这是在创建函数中添加第二个 * 以获取指向指针的指针之后发生的(请参阅其他 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;

用**,或者&...

我希望你明白我正在努力解决的问题,我想这很简单,但我似乎真的想不通:)

提前致谢!

最佳答案

这是由 operator precedence 引起的,因为成员访问运算符 -> 的优先级高于取消引用运算符 *。变化:

*query->queryS = queryString; 

到:

(*query)->queryS = queryString;

其他:

  • 不要强制转换 malloc() 的返回值。
  • 代码正在将只读字符串文字的地址分配给 char*。使用 const char* 或者复制字符串(使用 malloc()/strcpy()strdup() 如果您的实现提供了它。
  • 记住 free() 什么是 malloc()d。

关于c - 如何使用 C 语言将指向结构的指针传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16919206/

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