C - 将多个指针作为参数传递给 pthread_create

标签 c string pointers struct

我是 C 新手,这些指针的概念对我来说非常困惑。我试图做一些看起来很简单的事情,但我遇到了很多编译错误。

我想生成一个新线程并将多个指针作为参数传递给它(似乎在 c 中使用全局变量的唯一方法是通过指针),所以我创建了一个结构体来保存所有这些指针,但它不会似乎无论我改变什么都能编译。

这是我的代码(我删除了大部分代码,除了我的问题所在的地方)

//want to store the pointers in pointers, so when I change a pointer it changes the "global" variable

void request_handler(params *parameters) {
    params parameter = *parameters;
    int *numberOfOtherServers = parameter.numberOfServers;
    int *clientSock = parameter.clientSock;
    char ***serverList = parameters.serverList;
    struct function **functionList[10] = parameters.functionList[10];
}

typedef struct {
    int *clientSock;
    int *numberOfServers;
    char **serverList;
    struct function *functionList[10];
} params;

struct function {
    char name[20];
    int parameterNumer;
    int canDo;
    char *otherServers[10];

};

int main(int argc, const char * argv[])
{
    int client_sock_desc;

    pthread_t handler_thread;

    struct function functionList[10] = {{"",0, 0, {}}};
    int i =0, numberofOtherServers;
    char *serverList[10];

    //create a struct to pass as the parameters
    struct params parameters;
    parameters.clientSock = &client_sock_desc;
    parameters.functionList[10] = functionList;
    parameters.numberOfServers = &numberofOtherServers;
    parameters.serverList = serverList;

    //create a thread for the new clients request to be handled
    if(pthread_create(&handler_thread, NULL, request_handler, parameters) != 0) {
        perror("pthread_create failed");
    }
}

C 是迄今为止使用过的最困惑的语言。这个任务应该很简单,但我很迷失,因为我猜测应该在变量上放置多少个 * 或 & 只是为了调用它。

最佳答案

您应该通过pthread_create参数的地址传递给request_handler函数。但由于它是局部变量,因此不适合传递其地址。

因此将其定义为指针并为其分配内存。

struct params *parameters = malloc(sizeof(*parameters));

使用->适当设置成员,并按原样传递。

更新:还有一些错误

  • params 的定义移至顶部 request_handler 函数之前。
  • 在 main 中定义 parameters 一个 params *parameters 而不是 struct params *parameters
  • 使用parameters->来访问成员,而不是parameters。无论它是指针。

关于C - 将多个指针作为参数传递给 pthread_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117201/

相关文章:

c - 如何仅使用 C 编程语言用 GCC 编译 Allegro 5 程序

c - 栈上的局部变量

c - 从串口读取和写入,通过linux中的c中的环回

c - %p 是将变量的地址打印为指针,还是打印它指向的内容?

c - C中的全局指针

c++ - 为什么我不能使用与 'const int*' 相同的 'const char*' 创建一个 int 数组?

c - 在 printf 参数列表中使用 ( )。这个语法是什么意思?

c - 没有 strtod/sprintf 的 float 转换

java - 将奇偶数与字符串分开

java - 分别分析字符串的每个单词