使用Struct将String数组和索引传递给C中的线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Struct将String数组和索引传递给C中的线程相关的知识,希望对你有一定的参考价值。
我试图传递一个字符串数组和索引从哪里开始结束搜索数组,我无法解决它在过去两天。我发送给pthread_create一个struct data thread_data,这里我能够发送int和long数据,但不能发送字符串数组,有人可以帮助我,如何传递这些。
struct data{
int tid;
unsigned long start;
unsigned long end;
char * word;
char * str;
};
struct data thread_data[NUM_THREADS];
void *searchString(void *passeddata)
{
struct data *t_data;
int tid1;
char * str[3];
t_data=(struct data *) passeddata;
tid1=t_data->tid;
str=t_data->str;
.....
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
...
char work[]={"First Line","Second line","Third line"};
...
while(fgets(arr[index],120, fp)!=NULL){
index=index+1;
thread_data[index].tid=index;
thread_data[index].str=work;
...
rc=pthread_create(&threads[index],NULL,searchString,(void *)&thread_data[index]);
...
}
pthread_exit(NULL);
}
答案
要保存多个字符串,您需要2D数组。
const char *work[]={"First Line","Second line","Third line", "Fourth Line"};
你需要在struct data
中使用指向指针来保存上面的数组。
struct data{
.....
const char **str;
size_t lenOfStr;
};
并将数组的长度显式传递给main
函数的线程函数。
您的示例代码可能如下所示。
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
struct data{
int tid;
unsigned long start;
unsigned long end;
char * word;
const char **str;
size_t lenOfStr;
};
struct data thread_data[3];
void *searchString(void *passeddata)
{
struct data *t_data;
int tid1;
const char **str = NULL;
t_data=(struct data *) passeddata;
tid1=t_data->tid;
str=t_data->str;
int i = 0;
for (i = 0;i<t_data->lenOfStr;i++)
printf("%s
", str[i]);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
const char *work[]={"First Line","Second line","Third line", "Fourth Line"};
int index = 0;
pthread_t threadid=0;
thread_data[index].tid=index;
thread_data[index].str=work;
thread_data[index].lenOfStr = sizeof(work)/sizeof(*work); // Calculate the size of work here
int rc=pthread_create(&threadid,NULL,searchString,&thread_data[index]);
pthread_exit(NULL);
}
以上是关于使用Struct将String数组和索引传递给C中的线程的主要内容,如果未能解决你的问题,请参考以下文章
使用类型`[my_struct]`将C结构数组传递给Rust函数的正确方法?