C 如何将命令行参数传递给线程函数
我有一个线程函数,我正在尝试传递它C 如何将命令行参数传递给线程函数,c,multithreading,casting,C,Multithreading,Casting,我有一个线程函数,我正在尝试传递它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. } 你想看什么就看什么 void*
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.
}
你想看什么就看什么
void* fn(void *param){
char** argv = *(char***)param;
}
或者更简单地说
int main(int argc, char** argv){
pthread_create(&p, NULL, fn, argv);
}
void* fn(void *param){
char **argv = param;
}
由于
argv
是指针,您可以通过将其转换为void*
并再次转换为原始类型来获得与原始值相同的值。命令行参数有两部分:
-参数的数量,以及argc
-包含实际参数的数组argv
pthread\u 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]);
...
您需要将
argc
和argv
都传递到pthread\u create
中,但只能传递一个参数。解决方案:将两者打包到一个结构中,并传递该结构的地址。@AJNeufeld:你真的不需要argc
,因为argv
数组总是以空POINTER结尾…@chrisdd:哦,天哪,我的年龄到了!对规范的愚蠢改进,使程序的行为更加可预测。。。我会在下面更新我的答案。。。然后,挥舞着我的手杖,“滚开!”OP应该如何处理大小未知的数组?@SergeyA:通过查找标记数组结尾的空指针。argv[i]会返回传递的第i个命令行参数吗?还是*argv[i]?
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);
...