c - 将结构传递给采用 void* 类型变量的回调

标签 c struct

我正在尝试将结构传递给使用 curl_easy_setopt 的回调集。这是结构:

typedef struct gfcontext_t {
  int sockfd;
  char requested_path[1024];
  char path[1024];
} gfcontext_t;

struct gfcontext_t ctx;

我已经用这两行设置了回调:

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ctx);

回调本身看起来像这样:

size_t write_callback(void *buffer, size_t size, size_t nmemb, void *userp) {
  printf("userp: %s\n", userp.requested_path);
}

机器说“请求成员‘requested_pa​​th’不是结构或 union 。”所以我猜 struct (ctx) 没有被正确传递。谁能指出我正确的方向?

最佳答案

userp 是一个指针。您应该将其类型转换为 gfcontext_t *

printf("userp: %s\n", ((gfcontext_t *)userp)->requested_path);

关于c - 将结构传递给采用 void* 类型变量的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42941460/

相关文章:

c - 访问结构内 char 指针的各个元素

c# - 如何在 C# 中模拟 C++ union ?

c - 查找字符串中最长单词的长度。 C语言

c - execl在forked进程中只执行一次,C编程

android - NFC P2P as3911 <--> 手机

c++ - C/C++ 结构内存布局等效

c - 在c中分配给struct中的数组

json - 将 Coldfusion json 转换为 struct

c - 是否可以同时使用自定义 sigaction 信号处理程序和 pthread_sigmask?

java - native JNI 文件无法在 Android Studio 中找到 Java 文件的路径