2016-01-19 1 views
1

Это то, что у меня есть до сих пор, когда я его компилирую, я получаю эту ошибку: lb54.c: В функции 'funct1': lb54.c: 38: 2: предупреждение: формат «% s» ожидает аргумент типа «char *», но аргумент 2 имеет тип «int» [-Wformat =] printf («% s \ n», name [i]); ^Как передать массив строк C в поток (pthreads)

при изменении% s на% d это работает, но он показывает несколько случайных чисел

#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h> 
#include <string.h> 

void * funct1(void* arg); 
void * funct2(void* arg); 

void main(){ 

char name[10][20]; 
int *id = (int*)malloc(sizeof(int)*10); 

int i,x=5; 

for(i=0;i<10;i++){ 
strcpy(name[i],"name"); 
id[i] = i; 
} 

pthread_t threadid; 
pthread_t threadname; 


pthread_create(&threadid,NULL,funct2,(void *)id); 
pthread_create(&threadname,NULL,funct1, &name); 
sleep(5); 
free(id); 
printf("parent thread exiting\n"); 

} 

void * funct1(void* arg){ 
int i; 
char *name = (char *)arg; 
for(i=0;i<10;i++){ 
printf("%s\n",name[i]); 
} 
} 

void * funct2(void* arg){ 
int i; 
int *id = (int *) arg; 
for(i=0;i<10;i++){ 
printf("%d\n",id[i]); 
} 
} 

ответ

0

Вы объявили переменную name внутри funct1 имеет тип CHAR *. Когда вы получаете доступ к нему с помощью [i], он становится только символом, поэтому он не подходит для% s.

Если вы уверены, что переменная name представляет собой массив строк, объявите ее либо char **name, либо char *name[].

0

Спасибо за ваши ответы, мне удалось заставить его работать, используя таНос в цикл для записи каждого имени (имя [я] = (символ *) таНос (20);)

Смежные вопросы