警告: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 而不是strlensizeof 行只是一个指针的大小(我认为是 4 个字节)。 这个:struct thread_data td[s] 非常糟糕。您不能静态分配具有未知数字的数组。好吧,在您的情况下,自从您犯了错误 2 后就知道了,但我不确定编译器是否知道。使用mallocline[2] 是一个字符,你为什么用%s 而不是%c? - 这可能是导致警告/分段错误的原因。它使用您那里的任何字符作为指针,并访问非法内存。 由于 2,循环将运行一次。

请阅读 C 教程。

【讨论】:

@ElhamKargar - 记得接受(左侧投票按钮下方的勾号)有助于解决您的问题的答案。

以上是关于警告:wint 到指针转换的主要内容,如果未能解决你的问题,请参考以下文章

赋值从没有强制转换的指针生成整数 [-Wint-conversion

警告:从/到不同大小的整数转换为/从指针转换

为啥这个 type_traits 代码会给我一个整数到指针转换警告?

将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告

C指针和数组:[警告]赋值使指针从整数而不进行强制转换[关闭]

GCC允许隐式int到指针转换?