警告:wint to poiter cast

时间:2016-11-28 08:52:41

标签: c++ linux multithreading

我不知道为什么会收到编译器警告和分段错误。

有可能检查出来吗?

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);
    }
 }

1 个答案:

答案 0 :(得分:0)

有一些不好的事情:

  1. 为什么你收到一个void *参数并进行转换,为什么不接受char * line作为参数?
  2. 您为什么使用sizeof代替strlensizeof行只是指针的大小(我认为是4个字节)。
  3. 这:struct thread_data td[s]非常糟糕。您无法静态分配具有未知数字的数组。好吧,在你的情况下它是已知的,因为你犯了错2,但我不确定编译器是否知道。使用malloc
  4. line[2]是一个角色,你为什么使用%s而不是%c? - 这可能是导致警告/分段错误的原因。它使用你在那里的任何角色作为指针,并访问非法内存。
  5. 由于2,循环将运行一次。
  6. 请阅读C教程。