Arduino printf(“s”,stringName)打印错误的文本,但只打印一次

Arduino printf(“s”,stringName)打印错误的文本,但只打印一次,arduino,Arduino,我有一个菜单功能,输入一个问题和两个选项,然后用户选择一个。每次都很好,只有一次;我打电话 if (menu("ou est le corps?","interieur ","exterieur")==1) { 但不是打印“interieur”,而是显示“p?” 如果没有空间,它可以正常工作,但我需要创建一个空间,\n并执行完全相同的操作。 我对这个函数有另一个调用,\n它可以正常工作,所以我不知道为什么它不能工作。有人有主

我有一个菜单功能,输入一个问题和两个选项,然后用户选择一个。每次都很好,只有一次;我打电话

 if (menu("ou est le corps?","interieur ","exterieur")==1)
    {
但不是打印“interieur”,而是显示“p?” 如果没有空间,它可以正常工作,但我需要创建一个空间,\n并执行完全相同的操作。 我对这个函数有另一个调用,\n它可以正常工作,所以我不知道为什么它不能工作。有人有主意吗

PS:choix1的值随后通过蓝牙发送,并在那里保持不变

PPS:如果有什么不清楚的地方,请告诉我,我不是天生的英国人

PPPS(抱歉):再次尝试运行相同的代码,它似乎打印了一个随机字符,后跟“?”,我有两个“p?”,一个“?”和一个“?”

[更新]一次“#”

int菜单(字符串文本、字符串选项X1、字符串选项X2){
[...]
M5.Lcd.printf(“->%s%s”,choix1,choix2);
不能将
String
对象视为
const char*
,这正是格式说明符
%s
所期望的。
String
是一个用于存储..字符串/字符数据的Arduino类,但此类的对象并不等同于指向数据的原始指针

为此,您需要调用
String
对象上的
c_str()
方法来获取指向数据的c-String指针,如文档[1]所示

[…]
M5.Lcd.printf(“->%s%s”,choix1.c_str(),choix2.c_str());
[..]
[1]

int menu (String texte, String choix1, String choix2)
{
  envoye = 0;

  rxValue = "0";
  while (digitalRead(M5_BUTTON_HOME) != LOW && rxValue == "0")
  {


    heure();
    M5.Lcd.setTextSize(2);
    M5.Lcd.print(texte);
    M5.Lcd.printf("\n");

    if (selec == 0)
    {
      M5.Lcd.printf("->%s   %s", choix1, choix2);
    }
    else
    {
      M5.Lcd.printf("  %s ->%s", choix1, choix2);
    }
    if (M5.BtnB.read() != 0)
    {
      if (selec == 0)
      {
        selec = 1;
      }
      else
      {
        selec = 0;
      }
      while (M5.BtnB.read() != 0) 
      {
      if(digitalRead(M5_BUTTON_HOME) == LOW)
      {
        M5.Lcd.fillScreen(BLACK);
        delay(1000);
        if(digitalRead(M5_BUTTON_HOME) == LOW)
      {
        choix=50;
        heure();
        delay(1000);
        return 1;
      }
      }
        }

    }

    if (deviceConnected && envoye == 0)
    {

      sendchoix(texte, choix1, choix2);
      envoye++;

    }
  }
  if (rxValue != "0")
  {

    recuble = &rxValue[0];
    selec = atoi(recuble) - 1;


    rxValue = "0";
  }
  M5.Lcd.fillScreen(BLACK);
  delay(300);
  return selec;
}