C: PThread_create параметр Parsing Char [] для работы - PullRequest
4 голосов
/ 08 мая 2011

Привет всем,

У меня есть этот метод:

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 без этого предупреждения? Спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

Функции для потоков должны быть прототипированы:

void *func(void *argv);

Как и во всех пустых указателях, вам необходимо интерпретировать («приводить») указатель на значимую сущность.Вы читаете FileLocal функции, затем становится:

void *readFileLocal(void *argv)
{
    char *fname = argv; // Cast to string
    // Rest of func
}
2 голосов
/ 08 мая 2011

Просто используйте это:

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

И рассмотрите возможность изменения подписи вашей функции на:

void *readFileLocal(void *fileName) { }

Когда вы передаете указатель на функцию (например, тот, который вы используете в *Параметр 1007 *) вам не нужно ставить &.

Кроме того, когда у вас есть массив (например, input в вашем случае), вам не нужно &, поскольку в В качестве указателей уже можно использовать массивы C .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...