
[英]Warning: initialization makes pointer from integer without a cast(integer pointers)
[英]warning during initialization of struct '… makes pointer from integer without a cast'
我有以下情况:
struct Lamp {
char *highAddress [9];
char *lowAddress [9];
bool OnOff;
bool active;
uint8_t power;
uint8_t brightness;
uint8_t temperatures;
uint8_t faultCount;
} ;
struct lamps Lamp [] = {
{ (char *) "0013A200" , (char *) "4094500D" , false, true , 0, 0 , 0, 0 } ,
{ (char *) "0013A200" , (char *) "40B12530" , false, true , 0, 0 , 0, 0 } ,
{ (char *) "11111111" , (char *) "22222222", false , false, 0, 0 , 0, 0 } ,
{ (char *) "33333333" , (char *) "44444444", false , false, 0, 0 , 0, 0 } ,
{ (char *) "55555555" , (char *) "66666666", false , false, 0, 0 , 0, 0 } ,
{ (char *) "77777777" , (char *) "88888888", false , false, 0, 0 , 0, 0 } ,
{ (char *) "99999999" , (char *) "00000000", false , false, 0, 0 , 0, 0 } ,
{ (char *) "AAAAAAAA" , (char *) "BBBBBBBB", false , false, 0, 0 , 0, 0 } ,
{ (char *) "CCCCCCCC" , (char *) "DDDDDDDD", false , false, 0, 0 , 0, 0 } ,
{ (char *) "EEEEEEEE" , (char *) "FFFFFFFF", false , false, 0, 0 , 0, 0 } ,
};
使用avr-gcc-C99编译我收到显示的消息。
可能是什么?
非常感谢你。
多梅尼科
成员highAddress
和lowAddress
是指针数组 。 只需使它们成为简单的指针(或数组),它就可以正常工作:
struct Lamp
{
char *highAddress;
char *lowAddress;
...
};
Joachim已经给了你一个有效的答案,这里作为补充,它可能只是为了评论。
此外,您的代码还需要考虑几个小问题:
字符串文字是不可变的,因此这两个字段的类型最好是char const*
。 否则,如果您的代码必须在以后更改它们,请在某种程度上执行与Joachims所说的相反的操作,并使用char highAddress[9]
在struct
包含该字符串的副本。
在大多数情况下,字符串文字"abcde"
“衰变”为指向其基本类型的指针,因此char*
。 从这个意义上讲,你所做的演员阵容对你没有任何帮助。 不要使用演员,除非你真的必须,你真的知道你在做什么。 在这里,特别是它们实际上是反效果的,因为在初始化器中,它们在初始化char
数组时可能具有不同的作用。 对于变量char highAddress[9]
,演员char highAddress[9]
将是完全错误的。
在C99中有一个称为指定初始化器的构造,它可以帮助您更好地了解正在发生的事情:
struct lamps Lamp [] = {
{ .highAdress = "0013A200" ,
.lowAdress = "4094500D" ,
.OnOff = false, ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.