gpt4 book ai didi

c - 如何将命令行参数传递给线程函数

转载 作者:行者123 更新时间:2023-12-04 21:51:33 24 4
gpt4 key购买 nike

我有一个线程函数,我试图传递它argv,但我没有成功。有什么帮助吗?

int main(int argc, char** argv){
pthread_create(&p, NULL, fn, (void *)&argv);
}

void* fn(void *param){
// How to cast here, so I will be able to use it as param[0], param[1] etc.
}

最佳答案

命令行参数分为两部分:

  • argc - 参数数量,以及
  • argv - 包含实际参数的数组。

由于您只能将一个“用户数据”参数传递给 pthread_create,因此您需要将这两个值打包到一个结构中,然后将该结构的地址作为用户数据传递。

typedef struct ArgCV {
int argc;
char **argv;
};

int main(int argc, char **argv) {
ArgCV args;
args.argc = argc;
args.argv = argv;
pthread_create(&p, NULL, fn, &args);
...

void* fn(void* param) {
ArgCV *args = (ArgCV*) param;

for(int i=0; i<args->argc; i++)
printf("%s\n", args->argv[i]);
...

但是,正如 @ChrisDodd 所指出的,argv[] 数组保证以 NULL 终止;您实际上不需要传入 argc,线程只需计算数组中非空值的数量即可确定参数的数量(如果需要)。

int main(int argc, char **argv) {
pthread_create(&p, NULL, fn, argv);
...

void* fn(void* param) {
char **argv = (char**) param;

int argc = 0;
while(argv[argc] != NULL) {
printf("argv[%d] = %s\n", argc, argv[argc]);
argc++;
}
printf("There are %d arguments\n", argc);
...

关于c - 如何将命令行参数传递给线程函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050901/

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