2013-12-15 100 views
1

我有以下情況:警告「......讓自整數指針不進行強制轉換」

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編譯我得到顯示的消息。

可能是什麼?

非常感謝。

多梅尼科

回答

3

成員highAddresslowAddress是指針的陣列。只是讓他們簡單的指針(或數組),它會很好地工作:

struct Lamp 
{ 
    char *highAddress; 
    char *lowAddress; 
    ... 
}; 
0

勒夫已經給了你一個有效的答案,這在這裏作爲補充,它可能是長期的只是一個評論。

此外,將考慮與你的代碼的幾個小事情:

  • 字符串文字unmutable,所以類型爲這兩個領域 將更好地爲char const*。否則,如果您的代碼稍後必須更改它們,請按照某種方式與Joachims說的 相反,並使用char highAddress[9]在您的struct中有一個 字符串的副本。

  • 在大多數情況下,字符串文字"abcde"「衰變」爲指向其基本類型的指針,因此char*。從這個意義上說,你正在做的演員對你無能爲力。除非你真的必須和你真的知道你在做什麼,否則不要使用演員。特別是在這裏,它們實際上是反效果的,因爲在初始化器中它們可能在初始化陣列時具有不同的作用。對於變體char highAddress[9],演員表將是錯誤的。

  • 有在C99中構造一個名爲指定的初始化程序,將幫助你瞭解一個好一點了事情的原委:


struct lamps Lamp [] = { 
    { .highAdress = "0013A200" , 
    .lowAdress = "4094500D" , 
    .OnOff = false, ... 
相關問題