Arduino温脉检测项目出现字符串常量转char*编译警告如何解决
Arduino编译警告修复方案:字符串常量转char*问题
警告原因
该警告是因为旧版本Arduino的SoftwareSerial库中find()方法的入参定义为char*类型,但你传入的"Error"是只读的字符串常量,类型为const char*,ISO C++标准不允许隐式将const类型指针转换为非const类型指针,因此抛出该警告。
修复方案
有三种常用的修复方式,任选其一即可:
- 方案1:强制类型转换(最简便,无需修改其他逻辑)
直接给字符串常量添加强制转换符,将const char*转为char*,由于find()方法不会修改传入的字符串内容,该操作是安全的。
修改esp_8266()函数中对应的代码行:
// 修改前 if (ser.find("Error")){ // 修改后 if (ser.find((char*)"Error")){
- 方案2:用可变char数组存储待查找字符串(更符合C++编码规范)
先将常量字符串存入可变的char数组,再传入find()方法,无需强制转换:
void esp_8266() { // 其他原有代码不变,在调用find前新增下面一行 char errorHint[] = "Error"; if (ser.find(errorHint)){ Serial.println("AT+CIPSTART error"); return; } // 其他原有代码不变 }
- 方案3:升级依赖版本
更新Arduino IDE到最新正式版,或单独升级SoftwareSerial库到最新版本,新版库已经将find()方法的入参改为const char*类型,兼容字符串常量传入,无需修改代码即可消除警告。
内容的提问来源于stack exchange,提问作者LemonSpatula
相关产品推荐
相关产品推荐

