警告:wint 到指针转换
Posted
技术标签:
【中文标题】警告:wint 到指针转换【英文标题】:warning : wint to poiter cast 【发布时间】:2016-11-28 08:52:41 【问题描述】:我不知道为什么会收到编译器警告和分段错误。
可以去看看吗?
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】:有一些不好的地方:
-
为什么您会收到一个 void* 参数并将其强制转换,为什么不接受 char *line 作为参数?
为什么使用
sizeof
而不是strlen
? sizeof
行只是一个指针的大小(我认为是 4 个字节)。
这个:struct thread_data td[s]
非常糟糕。您不能静态分配具有未知数字的数组。好吧,在您的情况下,自从您犯了错误 2 后就知道了,但我不确定编译器是否知道。使用malloc
。
line[2]
是一个字符,你为什么用%s
而不是%c
? - 这可能是导致警告/分段错误的原因。它使用您那里的任何字符作为指针,并访问非法内存。
由于 2,循环将运行一次。
请阅读 C 教程。
【讨论】:
@ElhamKargar - 记得接受(左侧投票按钮下方的勾号)有助于解决您的问题的答案。以上是关于警告:wint 到指针转换的主要内容,如果未能解决你的问题,请参考以下文章
赋值从没有强制转换的指针生成整数 [-Wint-conversion
为啥这个 type_traits 代码会给我一个整数到指针转换警告?
将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告