gpt4 book ai didi

c - 使用 Struct 将字符串数组和索引传递给 C 中的线程

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:00 26 4
gpt4 key购买 nike

我试图传递一个字符串数组和索引从哪里开始结束在数组中搜索,我从最近两天无法解决它。我正在向 pthread_create 发送一个结构数据 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);
}

最佳答案

要保存多个字符串,您需要二维数组。

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\n", 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);
}

关于c - 使用 Struct 将字符串数组和索引传递给 C 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52359951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com