【问题标题】:Warning in Arduino compiler: warning: deprecated conversion from string constant to 'char*'Arduino 编译器中的警告:警告:不推荐将字符串常量转换为 'char*'
【发布时间】:2021-07-02 01:23:29
【问题描述】:

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

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

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

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

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

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

指向线:

char* BoardName = "XY32";

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

【问题讨论】:

    标签: compiler-errors arduino


    【解决方案1】:

    这个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/

    【讨论】:

    • 谢谢!那行得通!我一直对 C 中的字符串感到困惑。而且已经有一段时间了,所以我忘记了我学到了什么。 :-)
    • c 样式字符串是 \0 终止的字符数组。这就是为什么您通常通过 char 指针来寻址它们的原因。它指向该字符串的第一个字符并以空字符结束。所以你不必给出长度。但是您没有尝试将它们创建为 char 指针
    • const char* BoardName = "XY32"; 会工作
    • @Piglet 是的,它现在又回来了。每个字符都有一个指向下一个字符的指针或类似的东西。我将不得不再次破解那些 C 书!
    猜你喜欢
    • 2011-11-20
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多