C:PThread_create解析Char []参数来起作用

时间:2011-05-08 12:47:44

标签: c

Hallo All,

我有这个方法:

void *readFileLocal(char filename[]){
       .....
}

现在我想以一个线程开始这个方法:

char input[strlen(argv[1])];
strcpy(input,argv[1]);
pthread_t read,write;
pthread_create(&read, NULL, &readFileLocal, &input);

但在编译过程中它会发出警告:

file.c:29: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type

/usr/include/pthread.h:227:注意:预期'void *(*)(void *)'但参数的类型为'void *(*)(char *)'

如何在没有此警告的情况下通过pthread_create解析char数组到我的函数? 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

请使用:

pthread_create(&read, NULL, readFileLocal, input);

并考虑将您的功能签名更改为:

void *readFileLocal(void *fileName) { }

当您传递指向函数的指针(就像您在readFileLocal参数中使用的指针)时,您不需要放置&

此外,如果您有一个数组(例如input),则不需要&,因为 C 数组已经可以用作指针。< / p>

答案 1 :(得分:2)

线程的函数需要原型化:

void *func(void *argv);

与所有void指针一样,您需要解释(“强制转换”)指向有意义实体的指针。 readFileLocal函数然后变为:

void *readFileLocal(void *argv)
{
    char *fname = argv; // Cast to string
    // Rest of func
}