2014-10-09 107 views
3

我正在使用線程,我希望線程讀取一個字符串並將其返回給main,以便我可以在main中使用它。你可以幫我嗎?這是我做的,但在其輸出顯示奇怪的字符:從線程返回一個「字符串」

螺紋:

char *usr=malloc(sizeof(char)*10); 
[...code...] 
return (void*)usr; 

主:

[...code...] 
char usr[10]; 
pthread_join(login,(void*)&usr); 
printf("%s",usr); 

回答

3

讓頁頭中的線程函數一些內存和複製一些字符串記憶。

然後從線程函數返回該內存的指針。

在主要功能爲接收線程函數使用的返回值pthread_join()需要類型轉換接收器值(void**)

見下面的代碼。


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

void * 
incer(void *arg) 
{ 
    long i; 

     char * usr = malloc(25); 
     strcpy(usr,"hello world\n"); 
     return usr; 
} 


int main(void) 
{ 
    pthread_t th1, th2; 
    char * temp; 

    pthread_create(&th1, NULL, incer, NULL); 


    pthread_join(th1, (void**)&temp); 
     printf("temp is %s",temp); 
    return 0; 
} 

這是你想要的。

+1

非常感謝! – testermaster 2014-10-09 11:53:17

+0

只是一點點的解釋會使這個答案upvoteable ... – alk 2014-10-09 17:02:39

+0

我強烈懷疑OP的代碼失敗的根本原因是'pthread_join()'的第二個參數錯誤的轉換。 – alk 2014-10-10 07:42:52