在pthread_create处传递字符***
(这是短路代码) pthread_create上的char**运行良好在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:");
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";