c pthread_create字符串参数

时间:2018-03-26 01:05:59

标签: c string arguments pthreads

我使用c线程。

我想使用字符串参数。

在我的来源

int main(int argc, char **argv){
  pthread_t thread[1];
  pthread_create(&thread[0], NULL, thread_A, (void *) argv[0]);
  pthread_join(thread[0], NULL)
}

void * thread_A(void * arg){
  char argv[100] = {0};
  strcpy(argv, (char *) arg);
}

comfile时这个 像这样的警告

  

pthread.h:225:12:注意:预期' void *(*)(void *)'但参数的类型为' void *(*)(char **)'

所以我使用(void *)& argv [0]。但这也是错误。

我可以尝试什么?

1 个答案:

答案 0 :(得分:3)

否则

pthread_create(&thread[0], NULL, thread_A, (void *) argv[0]);

甚至没有演员

pthread_create(&thread[0], NULL, thread_A, argv[0]);
如果你想传递一个字符串作为参数,那么

会很好。但是 警告你正在看

  

pthread.h:225:12:注意:预期void * (*)(void *)但参数类型为void * (*)(char **)

不是在讨论第四个参数(线程函数的参数),它是关于第三个参数: 功能指针。在这种情况下,表示您传递的功能有 这个签名:

void *thread_A(char **arg);

当它期待

void *thread_A(void *arg);

您发布的代码未生成您发布的警告,我认为代码是您 实际上使用声明thread_A作为void * (*)(char **)而不是void * (*)(void*)。所以检查 你仔细编码。

所以你正在寻找的真实演员将是

pthread_create(&thread[0], NULL, (void * (*)(void*)) thread_A, argv[0]);