如何将char*argv[]传递给pthread_create?

如何将char*argv[]传递给pthread_create?,c,C,我试图将传入主线程的任何参数传递给使用pthread_create创建的子线程 void *threadMainLoop(void *arg){ char *arguments = (char*)arg; printf("arg 1 - %s\n", arguments[1]); } int main(int argc, char *argv[]){ printf("Start of program execution\n"); rc = pthread_c

我试图将传入主线程的任何参数传递给使用pthread_create创建的子线程

void *threadMainLoop(void *arg){
    char *arguments = (char*)arg;
    printf("arg 1 - %s\n", arguments[1]);

}

int main(int argc, char *argv[]){
    printf("Start of program execution\n");

    rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
    printf("Thread create rc: %i, %d\n", rc, outboundThread);
    if(rc != 0){
        printf("Thread creation failed\n");
        exit(1);
    }
    pthread_join(outboundThread, NULL);
    return 0;
}

上面的代码不起作用,您能告诉我如何在线程中访问ARGV数组,如ARGV[0]等吗?

主ARGV是一个字符**,而不是一个字符*,因此您应该在threadMainLoop中将其转换回。

主ARGV是一个字符**,而不是一个字符*,这就是您应该在ThreadMain循环中将其转换回的内容。

现在可以工作了……感谢Steve在写入方向上的推动

void *threadMainLoop(void *arg){
    char **arguments = (char**)arg;   
    printf("args[0] =%s\n", arguments[0]);
    printf("args[1] =%s\n", arguments[1]);
}

int main(int argc, char *argv[]){
    printf("Start of program execution\n");

    rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
    printf("Thread create rc: %i, %d\n", rc, outboundThread);
    if(rc != 0){
        printf("Thread creation failed\n");
        exit(1);
    }
    pthread_join(outboundThread, NULL);
    return 0;
}

现在可以了…感谢Steve在写方面的推动

void *threadMainLoop(void *arg){
    char **arguments = (char**)arg;   
    printf("args[0] =%s\n", arguments[0]);
    printf("args[1] =%s\n", arguments[1]);
}

int main(int argc, char *argv[]){
    printf("Start of program execution\n");

    rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
    printf("Thread create rc: %i, %d\n", rc, outboundThread);
    if(rc != 0){
        printf("Thread creation failed\n");
        exit(1);
    }
    pthread_join(outboundThread, NULL);
    return 0;
}

您好,谢谢您的反馈……非常感谢。我对C非常陌生,您能告诉我如何在ThreadMain循环中使用char**进行反求吗?您好,根据下面的GNU教程,argv是char*argv[]吗?这就是为什么我用这种方式…我错了吗?您好,谢谢您的反馈……非常感谢。我对C非常陌生,您能告诉我如何在ThreadMain循环中使用char**进行反求吗?您好,根据下面的GNU教程,argv是char*argv[]吗?这就是为什么我用这种方式…我错了吗?我在一段代码中使用了你的答案,我发现了一个很大的错误。您必须复制argv,并且不能直接使用argv。Argv是一个自动变量。Argv可以在回调中使用之前销毁。只需在threadMainLoop的第一行添加一个sleep2,您就会看到它不再工作了!我在一段代码中使用了你的答案,我发现了一个很大的错误。您必须复制argv,并且不能直接使用argv。Argv是一个自动变量。Argv可以在回调中使用之前销毁。只需在threadMainLoop的第一行添加一个sleep2,您就会看到它不再工作了!