在pthread_create传递char ***

时间:2017-11-23 06:49:54

标签: 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:");
        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]);
}

但是在id刚刚添加*之后,char ***会出错。为什么会这样?

char *data[][]= ~

if (pthread_create(&thread_t, NULL, pthreadM, (void *)data) < 0)
{
    perror("thread create error:");
    exit(0);
}
void *pthreadM (void* data)
{
    char ***_data = (char ***)data;
    print_number(_data[1][i]);
}

这是print_number()

void print_number(const char *data)
{
    printf("%s", data);
}

1 个答案:

答案 0 :(得分:1)

假设data类似于

char *data[X][Y] = { { "abc", "def", ... }, ... };

data正如(void *) data一样传递给pthread_create

在线程主体中,对于这样一个复杂的对象,制作指向原始类型的指针可能更容易,更安全,比如

void *mythread(void *p) {
  char *(*pd)[][Y] = p;

并像这样使用

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