【问题标题】:warning: assignment makes integer from pointer without a cast. whats wrong?警告:赋值从没有强制转换的指针生成整数。怎么了?
【发布时间】:2014-01-31 20:17:06
【问题描述】:

我收到了这个警告“警告:赋值从没有强制转换的指针中生成整数”!我想弄清楚这是什么意思?我需要在我的功能 create_rectangle 中进行更改.....谢谢。任何帮助表示赞赏

struct point {
        int x;
        int y;
    };

    struct rectangle {
        struct point upperleft;
        struct point lowerright;
        char label[NAMESIZE + 1];
    };

和我的代码:

struct rectangle *create_rectangle(struct point ul, struct point lr,
                                   char *label) {

    struct rectangle *r = malloc(sizeof(struct rectangle));


    r->upperleft=ul;
    r->lowerright=lr;
    r->label[NAMESIZE+1]= strncpy(r->label,label,NAMESIZE);
   //here is the warning
      r->label[NAMESIZE] = '\0';

    return r;
}

【问题讨论】:

    标签: pointers casting warnings


    【解决方案1】:

    strncpy 返回一个您分配给 char 的指针。 (实际上,您将其分配给非法地址,因为r->label[NAMESIZE+1] 超出了数组的范围。)

    应该是

    struct rectangle *create_rectangle(struct point ul, struct point lr,
                                       char *label) {
    
        struct rectangle *r = malloc(sizeof(struct rectangle));
    
    
        r->upperleft=ul;
        r->lowerright=lr;
        strncpy(r->label,label,NAMESIZE);
        r->label[NAMESIZE] = '\0';
    
        return r;
    }
    

    【讨论】:

      【解决方案2】:

      strncpy 函数返回一个指向目标字符串的指针,而您将此指针分配给 r->label[NAMESIZE+1]。这没有多大意义。如果打算将label 复制到结构成员,则可以忽略返回值。

      strncpy(r->label, label, NAMESIZE);
      

      【讨论】:

        【解决方案3】:

        strncpy的返回值是一个指向r->label的指针。您不需要存储它,尤其是在未分配的内存中。

        【讨论】:

          猜你喜欢
          • 2011-07-04
          • 2015-10-19
          • 2013-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多