2015-05-25 40 views
1

我必須編寫一個接收單詞作爲參數的程序。對於每個參數,我必須創建一個線程來驗證單詞是否是palindrom,並且在這種情況下,它會增加一個全局變量和。 這是我做過什麼linux palindrom字符串參數

#include <stdio.h> 
#include <string.h> 
#include <pthread.h> 
#define MAX 15 

pthread_mutex_t mtx; 
int sum=0; 
void *Pal(void *arg) { 
char *p=char arg; 
// char p=*(int*)arg; 
int len,j; 
int flag=0; 
printf("%s received. ", p); 
len= strlen(p); 
for (j=0; j<len; j++) { 
    pthread_mutex_lock(&mtx); 
    if(p[j] ==p[len-j-1]) 
    flag +=1; 
    pthread_mutex_unlock(&mtx); 
} 
if (flag==len) { 
printf("%s is palindrome.good job \n", p); 
sum +=1; 
} 
else { 
printf("%s is not palindrome.Fail \n", p); 
} 
} 

int main(int argc, char* argv[]) { 
int i; 
pthread_mutex_init(&mtx, NULL); 
pthread_t t[MAX]; 
for(i=1 ; i<argc; i++) 
    pthread_create(&t[i], NULL, Pal, argv[i]); 
for(i=1 ; i<argc; i++) 
    pthread_join(t[i], NULL); 
printf("The global sum is:%d \n", sum); 
return 0; 
} 

的問題是有:焦炭P =字符arg.I不知道如何使字符串和參數之間的關係。 如果有人可以幫助我,我會被折服。

+0

其實這裏,我的錯誤:char * p = char arg; – Boolean

+0

行'char * p = char arg;'沒有任何意義,從'char *!= char'這個事實開始。 –

+0

是的,問題是我不知道如何用char來寫這行,以便與參數進行連接。 – Boolean

回答

2

你不需要投,因爲void *轉換成任何類型poitner沒有在C鑄造,所以

char *p = arg; 

會工作。

我沒有檢查程序的其餘部分,所以我不能說如果程序會按照您的預期工作,但至少可以解決一個問題。

+0

它wooorks。非常感謝你。這是我期待的答案。我不知道如何用char寫這行。再次感謝你! – Boolean

+1

如果它適合你,你可以接受答案! –

+0

@Boolean:..之前已經指出。請閱讀[遊覽],現在還不算太遲。 – usr2564301