我不知道为什么会收到编译器警告和分段错误。
有可能检查出来吗?
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 :(得分:0)
有一些不好的事情:
sizeof
代替strlen
? sizeof
行只是指针的大小(我认为是4个字节)。struct thread_data td[s]
非常糟糕。您无法静态分配具有未知数字的数组。好吧,在你的情况下它是已知的,因为你犯了错2,但我不确定编译器是否知道。使用malloc
。line[2]
是一个角色,你为什么使用%s
而不是%c
? - 这可能是导致警告/分段错误的原因。它使用你在那里的任何角色作为指针,并访问非法内存。请阅读C教程。