pthread_create(...., (void *)&word);
Вы передаете адрес указателю. &word
имеет тип char**
- это указатель на указатель на char
. Таким образом, вы можете либо получить его как char**
, а затем разыменовать указатель (а также убедиться, что адрес &word
действителен для выполнения другого потока), либо просто передать вместо него word
, как вы, вероятно, хотели это сделать.
printf("%s\n", *string);
- *string
- это char
, а не char*
. %s
расширяет указатель на массив символов с нулевым символом в конце char*
. Включите предупреждения компилятора и прослушайте их - компилятор должен предупреждать о таких ошибках.
Вы должны присоединиться к вашему потоку, прежде чем выходить из программы. Поскольку main
выходит сразу после pthread_create
, ваша программа завершается, другой поток также завершается. Поскольку второй поток не получает достаточно времени процессора для выполнения оператора printf
, ничего не выводится (если остальная часть кода будет действительной ..
Так что, вероятно, вы хочу:
void *print_string_in_reverse_order(void *str) {
char *string = str;
printf("%s\n", string);
return NULL;
}
int main(int argc, char *argv[]) {
pthread_t threadID;
const char *word = "word"; // string literals are immutable
printf("In function main(): Creating a new thread\n");
int status = pthread_create(&threadID, NULL, print_string_in_reverse_order, word);
pthread_join(threadID, NULL);
}