警告:赋值从指针生成整数而没有强制转换。怎么了?

时间:2014-01-31 20:17:06

标签: pointers casting warnings

我收到了这个警告"警告:赋值在没有强制转换的情况下从指针生成整数"!我想弄清楚这是什么意思?我需要改变我的想法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;
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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