首页 > 解决方案 > Arduino 编译器中的警告:警告:不推荐将字符串常量转换为 'char*'

问题描述

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

String strBoardName = "XY32";

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

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

并给我错误:

注意:没有已知的参数 1 从 'String' 到 'const char*' 的转换没有匹配函数调用 'ArduinoOTAClass::setHostname(String&)'

所以,我被迫声明另一个变量在这一行上使用,因此:

char* BoardName = "XY32";

并像这样使用它:

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

这很有效,但我真的很想只使用一个变量。

有可用的解决方法(在 Arduino 论坛On SO 上),但并不能真正解决我的问题。

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

警告:不推荐将字符串常量转换为 'char*' [-Wwrite-strings] char* BoardName = "XY32";

指向线:

char* BoardName = "XY32";

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

标签: compiler-errorsarduino

解决方案


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/


推荐阅读