【问题标题】:c pthread_create string argumentc pthread_create 字符串参数
【发布时间】:2018-03-26 01:05:58
【问题描述】:

我用的是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);
}

当编译这个 像这样的警告

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

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

我可以尝试什么?

【问题讨论】:

  • 警告说的是第三个参数,函数指针,看起来thread_A实际上是void *thread_A(char **data)。与第四个参数无关。
  • 我用这个,但是警告...谢谢你的回答

标签: c string arguments pthreads


【解决方案1】:

在做

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]);

【讨论】:

  • 我用你的回答解决了问题,谢谢你的帮助。
猜你喜欢
  • 2011-12-18
  • 2013-07-10
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2012-01-25
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多