我使用sprintf有什么问题吗?

时间:2014-06-08 08:36:17

标签: c arduino printf

我正在Arduino中使用这个函数将一个字符串填充到40个字符(我的LCD的宽度),这样在写入它的过程中它会清除上一次写入后留下的任何字符。

问题在于,当我使用它时,它会阻止我的RF24模块发送...(其他一切仍在运行,并且它已经收到)奇怪我知道......

  void printLine(char* line){

      sprintf(line, "%-40s", line);
      lcd.writeString(line);  

    }

有人指出,不应该从行写入行,我纠正了这个,但同样的问题。此功能也有同样的问题:

void emptyLine(){

  sprintf(line, "%-40s", "");
  lcd.writeString(line);  

}

这里是'line'的声明(来自代码顶部)

char line[lcdCols];

1 个答案:

答案 0 :(得分:1)

您正在尝试写入您正在阅读的相同字符缓冲区。

来自C99标准:

  

sprintf [...]如果在重叠的对象之间进行复制,则行为未定义。

实际上,这可能只会导致无限循环。