Сомнение в использовании массива символов
Я пытаюсь сделать светодиодную вывеску с помощью светодиодной ленты WS2812b, используя библиотеку FastLed (кстати, это отличная библиотека!), я уже могу показывать текст (пока только один, который я оставляю сохраненным в массиве символов в начале программы), но я хотел бы иметь возможность изменять этот текст с помощью последовательного порта Arduino, и вот в чем проблема:
При настройке текста, который будет отображаться в массиве светодиодов, следует использовать следующую функцию:
ScrollingMsg.SetText ((unsigned char *) TxtDemo, sizeof (TxtDemo) - 1);}
Где TxtDemo — это массив символов переменного типа.
Пока здесь все правильно, как я и прокомментировал, я могу показывать текст, но в момент получения данных из последовательного порта и сохранения их в массиве символов TxtDemo, когда я использую функцию sizeof(TxtDemo)
, полученное мной значение остается с исходным размером (вполне понятным) этого массива.
Например: если исходный текст был (сохранен в TxtDemo):
"Привет, мир", функция sizeof()
возвращает "11",
Но когда я беру то, что хочу показать на последовательном порту, и сохраняю это в переменной TxtDemo, я никак не могу изменить размер этого массива. Так что... что я могу сделать? Что вы мне порекомендуете?
@k.Cyborg, 👍1
1 ответ
Лучший ответ:
Массивы в C фиксированы. sizeof()
всегда будет возвращать объем выделенной памяти для массива.
Вместо этого следует использовать strlen()
, чтобы получить количество символов до (но не включая) завершающего символа NULL в конце строки.
ScrollingMsg.SetText ((unsigned char *) TxtDemo, strlen(TxtDemo));
Убедитесь, что в вашем исходном массиве достаточно места для хранения самой длинной строки, которую вы захотите отправить - она не выйдет за пределы вашего первоначального выделения. Также убедитесь, что в конце вашего допустимого текста есть символ NULL. Слишком легко забыть, что вам нужно вставить его после последнего полученного символа.
- Как преобразовать строку в шестнадцатеричный массив
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- Очень простая операция Arduino Uno Serial.readString()
- форматирование строк в Arduino для вывода
- Arduino Преобразование std:string в String
- Как прочитать входящие ШЕСТНАДЦАТИРИЧНОЕ значение из serial метод read ()?
- Печать массива с помощью функции печати и последовательной записи в Arduino Uno
Спасибо за быстрый ответ... теперь: как добавить нулевой символ???, @k.Cyborg
Я делаю это во время чтения из последовательного порта. Для каждого символа, который я помещаю в массив, я устанавливаю следующую запись на 0. Вот пример: https://majenko.co.uk/blog/reading-serial-arduino, @Majenko
Мужчины... статья просто ОТЛИЧНАЯ!!!! Спасибо!!!, @k.Cyborg
@k.Cyborg Вам также может быть полезно это: https://majenko.co.uk/blog/arrays-pointers-what-c, @Majenko