我收到了这个警告"警告:赋值在没有强制转换的情况下从指针生成整数"!我想弄清楚这是什么意思?我需要改变我的想法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;
}
答案 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->标签的指针。您不需要存储它,尤其是不能存储在未分配的内存中。