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