Типы строк. Нужна помощь с конвертацией.
- Войдите на сайт для отправки комментариев
Втр, 20/09/2022 - 16:53
Добрый день! Не могу разобраться как правильно конвертировать разные типы строк. Есть такой кусок кода:
bool receivePacket() { if (moduleMode != MASTER){ int len = udp.read(buf, 255); if (len > 0) buf[len] = '\0'; Serial.print("Packet received: "); Serial.println(buf); JSONVar myObject = JSON.parse(buf); if(myObject.length()){ Serial.println((const char*)myObject[0]); if((const char*)myObject[0] == "/pattern"){ Serial.println("OKOKOKO!!!"); setPattern((int)myObject[1]); } } return true; } else return false; }
Проблема заключается в том, что не выполняется условие if((const char*)myObject[0] == "/pattern")
Результат выполнения кода из монитора:
Packet received: ["/pattern", 28] /pattern
То есть (const char*)myObject[0] в монитор выводит /pattern, но условие почему-то не выполняется. Подскажите, в каком моменте я ошибаюсь?
В том, что пытаешься программировать, не умея читать язык?
В том, что пытаешься программировать, не умея читать язык?
Я топик в разделе для новичков вроде как создавал, нет? Не знаете как помочь или нет желания - пройдите мимо.
ты путаешь раздел для новичков с разделом для лентяев
ты путаешь раздел для новичков с разделом для лентяев
Проблема заключается в том, что не выполняется условие if((const char*)myObject[0] == "/pattern")
Подскажите, в каком моменте я ошибаюсь?
переменная типа const char* это указатель на массив, массивы нельзя сравнивать оператором "=="
Их надо сравнивать либо поэлементно, либо, в случае строк - использовать специальные функции из библиотеки strings - к примеру strcmp()
научись отличать строковый литерал и указатель на него. Зачитай чонить за strcmp(), лучше вслух, взобравшись на табуретку.
научись отличать строковый литерал и указатель на него.
ага, был неточен, поправил выше про указатель
переменная типа const char* это указатель на массив, массивы нельзя сравнивать оператором "=="
Их надо сравнивать либо поэлементно, либо, в случае строк - использовать специальные функции из библиотеки strings - к примеру strcmp()
strcmp() вроде как не имеет отношения к string, оно из «штатного комплекта», не?
Вообще-то про string никто и не говорил.
В Си строкой принято считать char*, и есть заголовочный файл string.h.
В Си++ в качестве строки обычно рассматривается тип string.
В Ардуино часто используется собственный тип String.
Потёрли то сообщение.
[引用=德西门]
学习区分字符串文本和指向它的指针。读出strcmp(),最好是大声朗读,爬在凳子上。
[/引用]
Научитесь отличать текст строки от указателя, указывающего на него.