大家好,
\n\n我有这个方法:
\n\nvoid *readFileLocal(char filename[]){\n .....\n}\nRun Code Online (Sandbox Code Playgroud)\n\n现在我想在线程中启动这个方法:
\n\nchar input[strlen(argv[1])];\nstrcpy(input,argv[1]);\npthread_t read,write;\npthread_create(&read, NULL, &readFileLocal, &input);\nRun Code Online (Sandbox Code Playgroud)\n\n但在编译过程中它给出了这个警告:
\n\nfile.c:29: warning: passing argument 3 of \xe2\x80\x98pthread_create\xe2\x80\x99 from incompatible pointer type\nRun Code Online (Sandbox Code Playgroud)\n\n/usr/include/pthread.h:227: 注意:预期 \xe2\x80\x98void * (*)(void *)\xe2\x80\x99 但参数类型为 \xe2\x80\x98void * (*)(字符 *)\xe2\x80\x99
\n\n如何在没有此警告的情况下通过 pthread_create 将 char 数组解析为我的函数?\n感谢您的帮助
\n只需使用这个:
pthread_create(&read, NULL, readFileLocal, input);
Run Code Online (Sandbox Code Playgroud)
并考虑将函数的签名更改为:
void *readFileLocal(void *fileName) { }
Run Code Online (Sandbox Code Playgroud)
当您传递一个指向函数的指针(就像您在readFileLocal参数中使用的指针)时,您不需要将 &.
另外,当你有一个数组(就像input你的情况一样)时,你不需要,&因为在C数组中已经可以用作指针。