线程函数中的字符串参数

时间:2014-11-10 00:39:58

标签: c multithreading

我在使用pthread_create将字符串传递给线程函数时遇到问题 当我运行程序时,我得到了奇怪的特征 这是代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <sys/stat.h>

#define NTHREADS 3



void *myFun(void *ptr){
     char * string;
     string = (char *) ptr;
     printf("string: %s\n", string);

    return NULL;
}

int main(int argc, char *argv[]){
    pthread_t threads[NTHREADS];
    char* thread_args[NTHREADS];
    int i;
    char* string;
    /* spawn threads */
    for (i=0; i<NTHREADS; ++i){
        string = "file1.txt";
        thread_args[i] = string;
        if(pthread_create(&threads[i], NULL, myFun, (void *) &thread_args[i]) != 0){ 
            printf("Error creating thread\n");
            exit(1);
        }
    }
  /* Wait for threads to finish */
    for (i=0; i<NTHREADS; ++i) {
        pthread_join(threads[i], NULL);
    }
    return 0;
}

我可以传递一个int而没有问题,就像我在代码中那样执行转换为int,但是使用char它不起作用。

1 个答案:

答案 0 :(得分:3)

传递指针,而不是指针的地址。

if(pthread_create(&threads[i], NULL, myFun, (void *) thread_args[i])
                                                     ^