Arduino 编译器中的警告:警告:不推荐使用从字符串常量到 'char*' 的转换

Warning in Arduino compiler: warning: deprecated conversion from string constant to 'char*'

我在不同的地方使用了一个字符串,所以我把它作为一个变量来重用 - 就像这样:

String strBoardName = "XY32";

不幸的是,在下一行中,它不起作用:

ArduinoOTA.setHostname(strBoardName); // give a name to our module

并给我错误:

note: no known conversion for argument 1 from 'String' to 'const char*' no matching function for call to 'ArduinoOTAClass::setHostname(String&)'

因此,我不得不声明另一个变量以在这一行中使用,因此:

char* BoardName = "XY32";

并像这样使用它:

ArduinoOTA.setHostname(BoardName); // give a name to our module

这是有效的,但我真的希望只使用一个变量。

有解决方法(On the Arduino forum and On SO ),但并没有真正解决我的问题。

此外,虽然这在早期工作正常,但我从 Arduino 1.6.5 升级到 Arduino 1.8.13 并有一个额外的问题。我收到此消息:

warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] char* BoardName = "XY32";

指向行:

char* BoardName = "XY32";

使用此变量的正确方法是什么(即没有警告或错误消息)并且我可以使用单个变量而不是两个变量?

char* BoardName = "XY32";不是你定义C字符串的方式!

使用

char BoardName[] = "XY32";

String strBoardName = "XY32"; 创建一个字符串。

ArduinoOTA.setHostname() 需要一个 const char 指针。

而不是

ArduinoOTA.setHostname(strBoardName); 

这样做

ArduinoOTA.setHostname(strBoardName.c_str());

https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/c_str/