2016-11-28 72 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