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数组到我的函数? 谢谢你的帮助
答案 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
}