我正在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];
答案 0 :(得分:1)
您正在尝试写入您正在阅读的相同字符缓冲区。
来自C99标准:
sprintf
[...]如果在重叠的对象之间进行复制,则行为未定义。
实际上,这可能只会导致无限循环。