compiler-errors - 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";
使用这个变量的正确方法是什么,所以它是正确的(即没有警告或错误消息)并且我可以使用单个变量而不是其中的两个?
解决方案
这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/
推荐阅读
- heroku - Shopify 应用 CLI Heroku -- 页面无响应
- hibernate - maven hibernate SqlServer 无法加载类
- javascript - 如何用 Sprite 循环 gif
- javascript - 滚动上的淡入淡出效果 - 给定的代码是什么意思?
- node.js - 节点 JS:UDP 客户端在 OSX (11.2.2) 中不起作用
- python - 编辑 Pandas 数据框行
- javascript - 单击时更改导航项文本、正文元素和导航样式(JS、jQuery)
- r - 具有一个相似列和 R 中不同列的新值
- arrays - 如何使用 typescript 的 Filter() 函数来检查 JSON 对象的内部属性
- url - 在 Python 中从 YouTube 中提取视频 URL