繁体   English   中英

在struct'...初始化期间发出警告,使整数指针不带强制转换'

[英]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编译我收到显示的消息。

可能是什么?

非常感谢你。

多梅尼科

成员highAddresslowAddress指针数组 只需使它们成为简单的指针(或数组),它就可以正常工作:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM