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