2016-11-28 79 views
-1

我不知道爲什麼我得到編譯器警告和分段錯誤。警告:wint to poiter cast

是否可以檢查出來?

struct thread_data{ 
    int thread_id; 
    char *message; 
}; 


void *print_message_function(void *ptr) 
{  
    int s,j; 
    char *line; 
    line = (char *) ptr; 
    s=sizeof(line); 
    struct thread_data td[s]; 

    printf("%s \n",line[2]); 

    for(j=0;j+3<s;j++) { 
     td[j].thread_id = (int)line[j+3]; 
     td[j].message = (char *)line[j+1]; 
     printf("message : %s \n ",td[j].message); 
    } 
} 

回答

0

有一些不好的事情:

  1. 你爲什麼要接受一個void *參數鑄造它,爲什麼不接受的char *線作爲參數?
  2. 爲什麼使用sizeof而不是strlensizeof行只是一個指針的大小(我認爲是4個字節)。
  3. 這個:struct thread_data td[s]非常糟糕。您不能靜態分配數字未知的數組。那麼你的情況就是因爲你犯了錯誤2而知道的,但我不確定編譯器是否知道。使用malloc
  4. line[2]是一個字符,你爲什麼用%s而不是%c? - 這可能是導致警告/分段錯誤的原因。它使用你有的任何字符作爲指針,並訪問非法內存。
  5. 循環將運行一次,因爲2

請仔細閱讀一個C教程。

+0

特別感謝:)))解決了:))))) –

+0

@ElhamKargar - 記得接受(左邊投票按鈕下方的勾號)一個幫助解決您的問題的答案。 – Tony