String в char - Толи лыжи не едут, то ли я не из того теста =(

imakofix
Offline
Зарегистрирован: 03.03.2018

При выводе текста на LED матрицу столкнулся с проблемой - при попытке перевести String в char - на табло отображается абракадабра. Но при вводе из заранее введеного значения char - отлично отрисовывет.

Сначала я попробовал вот так

void setup() {
  Serial.begin(115200);
  String mystring="Тестовое сообщение";
  char test[]="Тестовое сообщение";
  
  const char *mychar = mystring.c_str();

  if (mychar==test)Serial.print(" true");
  else Serial.print(" false");
  Serial.println();
  
}

void loop() {
}

Но в Serial увидел "false".

После решил пойти другим путём.

void setup() {
  Serial.begin(115200);
  
  String stringVar="Тестовое сообщение";
   char charVar2[]="Тестовое сообщение";
  
  char charVar[stringVar.length()+1];
  stringVar.toCharArray(charVar, sizeof(charVar));
  Serial.print(charVar2);
  Serial.print(" ");
  Serial.print(charVar2);

  if (charVar==charVar2)
    Serial.print(" true");
  else Serial.print(" false");
  Serial.println();
}

void loop() {
}

В Serial отбивается тот-же негативный результат.

Я в тупике =(

sadman41
Offline
Зарегистрирован: 19.10.2016

char[] так не сравнивают, см. функцию strcmp().

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

imakofix, у Вас действительно две разных строки, расположенные по разным адресам, содержимое которых совпадает.

Вы же сравниваете не содержимое, а указатели, а указатели различаются, о чем программа Вам и сообщает.

imakofix
Offline
Зарегистрирован: 03.03.2018
void setup() {
  Serial.begin(115200);
  
  String stringVar="Тестовое сообщение";
   char charVar2[]="Тестовое сообщение";
  
  char charVar[stringVar.length()+1];
  stringVar.toCharArray(charVar, sizeof(charVar));

  Serial.print(strcmp(charVar, charVar2));
}

void loop() {
}

Да. Уже проверил - они одинаковы, Но LED матрица считав это значение всё равно выводит абракадабру =(

sadman41
Offline
Зарегистрирован: 19.10.2016

Никто не знает, что за LED-матрица у вас и каким образом вы на нее выводите тексты. 

imakofix
Offline
Зарегистрирован: 03.03.2018

Пока что пытаюсь разобраться сам.

imakofix
Offline
Зарегистрирован: 03.03.2018

LED матрица - набор из 8 модулей 8x8 на MAX7219

на основе примера Parola_Duble_Height_v1_Russian (библиотеки MD_Parola и MD_MAX72xx) - всё же заработало. Но, не без костыля)

 

      String stringVar="Проверка";
      
      char charVar[stringVar.length()+1];
      stringVar.toCharArray(charVar, sizeof(charVar));

      char str[100];
      strcpy(str, charVar);
      strcat(str, " сложения");

      message[1]=str;