Типы строк. Нужна помощь с конвертацией.
- Войдите на сайт для отправки комментариев
Втр, 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()
const char *path = "/pattern"; if(myObject.length()){ if(strcmp((const char*)myObject[0], path) == 0){strcmp() вроде как не имеет отношения к string, оно из «штатного комплекта», не?
Вообще-то про string никто и не говорил.
В Си строкой принято считать char*, и есть заголовочный файл string.h.
В Си++ в качестве строки обычно рассматривается тип string.
В Ардуино часто используется собственный тип String.
Потёрли то сообщение.
[引用=德西门]
学习区分字符串文本和指向它的指针。读出strcmp(),最好是大声朗读,爬在凳子上。
[/引用]
Научитесь отличать текст строки от указателя, указывающего на него.