我有以下情况:
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进行编译我收到了显示的消息。
可能是什么?
非常感谢。
多梅尼科
答案 0 :(得分:3)
成员highAddress
和lowAddress
是指针数组。只需使它们成为简单的指针(或数组),它就可以正常工作:
struct Lamp
{
char *highAddress;
char *lowAddress;
...
};
答案 1 :(得分:0)
Joachim已经给了你一个有效的答案,这里作为补充,很可能只是为了评论。
此外,您的代码还需要考虑几个小问题:
字符串文字是不可变的,因此这两个字段的类型
最好是char const*
。否则,如果您的代码必须在以后更改它们,请执行相反的操作
Joachims在某种程度上说,并使用char highAddress[9]
来复制
您struct
。
在大多数情况下,字符串文字"abcde"
"衰变"到指向其基类型的指针,所以char*
。从这个意义上讲,你所做的演员阵容对你没有任何帮助。除非你真的必须并且你真的知道自己在做什么,否则不要使用演员阵容。在这里,特别是它们实际上是反效果的,因为在初始化器中,它们在初始化char
数组时可能具有不同的作用。对于变体char highAddress[9]
,演员阵容将是完全错误的。
在C99中有一个名为指定初始化程序的构造,可以帮助您更好地了解正在发生的事情:
struct lamps Lamp [] = {
{ .highAdress = "0013A200" ,
.lowAdress = "4094500D" ,
.OnOff = false, ...