在pthread_create处传递字符***

在pthread_create处传递字符***,c,linux,unix,C,Linux,Unix,(这是短路代码) pthread_create上的char**运行良好 int main() { char *data[RO] = { /*texts*/ }; pthread_t thread_t; int status; if (pthread_create(&thread_t, NULL, pthreadM, (void *)data) < 0) { perror("thread create error:");

(这是短路代码)

pthread_create上的char**运行良好

int main()
{
    char *data[RO] = { /*texts*/ };

    pthread_t thread_t;
    int status;

    if (pthread_create(&thread_t, NULL, pthreadM, (void *)data) < 0)
    {
        perror("thread create error:");
        exit(0);
    }
    pthread_join(thread_t, (void **)&status);
    printf("Thread End %d\n", status);
    return 1;
}

void *pthreadM (void* data)
{
    char **_data = (char **)data;
    print_number(_data[i]);
}

假设
数据

char *data[X][Y] = { { "abc", "def", ... }, ... };
数据
作为
(void*)数据
传递给
pthread\u create
,就像您所做的那样

在线程体中,对于如此复杂的对象,创建指向原始类型的指针可能更容易、更安全,如

void *mythread(void *p) {
  char *(*pd)[][Y] = p;
像这样使用它

  (*pd)[0][1] = "hello";

我本来想说缩短的代码不是一个合适的代码,但后来我注意到你试图成为一个。不要这样做。哦,数组不是指针。
char*data[]=~pthread\u create(&thread\t,NULL,pthreadM,(void*)data)
中的
~
看起来非常可疑。希望这不是你真正项目的一部分。可能不会-如
之后丢失。您是否知道返回的是成功/错误代码,而不是传递的线程函数的结果?
char[x][y]
如果传递给函数,则不会衰减为
char***
,而是衰减为
char(*)[y]
您面临的问题与线程无关。
void *mythread(void *p) {
  char *(*pd)[][Y] = p;
  (*pd)[0][1] = "hello";