编译器抛出"初始化程序无效"写char const时*

时间:2014-11-11 12:04:06

标签: c string chars

我是C编程的新手,所以请帮助一个家伙。 在编译时我遇到了“无效的初始化程序”问题。这是相关的代码。

void lcd_writePString(char const* string) {
  char c;
  while ((c = (char)pgm_read_byte(string++)))
  lcd_writeChar(c);
}

void os_errorPStr(char const* str) {
  SREG &= 0b10111111; //Interrupts global deaktivieren
  lcd_clear();
  lcd_writePString(PSTR(str)); //THIS IS WHERE THE COMPILER THROWS OUT THE ERROR
  while (os_getInput()!=0b10000001){
    os_waitForInput();
  }
  lcd_clear();
  SREG |= 0b01000000;
 }

那么为什么我的编译器会抛出错误“invalid initializer”? PSTR将字符串写入我的微控制器的闪存中。

这就是PSTR的作用:

 /** \ingroup avr_pgmspace
     \def PSTR(s)

    Used to declare a static pointer to a string in program space. */
 # define PSTR(s) ((const PROGMEM char *)(s))
 #else  /* !DOXYGEN */
 /* The real thing. */
 # define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))
 #endif /* DOXYGEN */

1 个答案:

答案 0 :(得分:0)

lcd_writePString需要一个char const*,但你通过一些不起眼的宏将参数转换为const PROGMEM char *。要么不将其强制转换为此类型,要么更改lcd_writePString的原型。