Как очистить содержимое строки в Arduino?
В настоящее время я преобразую символы в полученном символе[20]
в строку, используя строку randomString(получена)
, и я могу отобразить ее с помощью Serial.println(случайная строка)
. После отображения строки я хотел бы знать, как проще всего очистить ее содержимое.
@adrian.wong, 👍0
Обсуждение3 ответа
В C и C++ массив символов, заканчивающийся нулем, является строкой (хотя и не строкой). Многие процедуры для считывания входных данных завершают результат нулем, как и такое назначение, как"
char foo[] = "This is a string.";
Все, что вам нужно будет сделать, чтобы "очистить" эту строку, - это присвоить нулю первый символ. Например:
foo[0] = '\0';
При этом очищается только первый байт. С помощью = { 0 };
все очищено., @ott--
Для строк C (с нулевым окончанием), если первый символ равен нулю, то строка пуста или пуста. Функционально это решает проблему, но если есть проблемы с безопасностью, то вы правы, что вся строка должна быть очищена., @dlu
Первая версия с преобразованием из char[] в класс строк Arduino:
char received[20];
...
// Some code that assigns received
...
String randomString(received);
Serial.println(randomString);
// Clear string
randomString = "";
Вторая версия без класса Arduino String:
char received[20];
...
// Some code that assigns received
...
Serial.println(received);
// Empty received buffer
received[0] = 0;
И третья версия, в которой буфер очищен:
char received[20];
...
// Some code that assigns received
...
Serial.println(received);
// Clear received buffer
memset(received, 0, sizeof(received));
Ура!
Хотя это старый вопрос, я решил вмешаться. Если бы я потратил время, чтобы правильно понять вопрос, я полагаю, что вы хотели очистить содержимое строки, а не массива символов. Это может помочь тем, кто хотел очистить строку по другим причинам.
String randomString(received);
Serial.println(randomString);
randomString.clear(); // This will clear the string
Следует отметить, что для вывода не было необходимости сначала преобразовывать в строку, если это все, что требовалось, потому что println в любом случае предпочтет массив символов.
Опять же, в строке есть метод .clear()
для тех, кто попал на эту страницу с помощью веб-поиска.
Обновление:
Благодаря @VE7JRO в комментариях было указано, что доступность четких методов не является универсальной. У устройств ESP с совместимыми с Arduino базовыми библиотеками это есть, как и у других. Но устройства AVR, такие как UNO, этого не делают. Что я и подтвердил.
Пересмотренная версия для всех случаев, когда метод .clear
недоступен.
String randomString(received);
Serial.println(randomString);
randomString = ""; // This will clear the string
Arduino IDE 1.8.9 говорит это о функции clear ()
"строка класса" не имеет члена с именем "clear"". Какую версию IDE / другого программного обеспечения вы используете?, @VE7JRO
@VE7RJO Использует platformio, он показывает метод. Который я уже использовал в коде. Это может зависеть от того, используется ли AVR или ESP, но это, безусловно, присутствует на ESP8266., @voidPointer
В вопросе "название" ОП упоминается "Arduino", который, насколько я знаю, не является ESP8266. Возможно, другой пользователь Arduino с более новой версией IDE мог бы подтвердить / опровергнуть, работает это или нет., @VE7JRO
@VE7JRO пересмотрели после тестирования. Спасибо., @voidPointer
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- форматирование строк в Arduino для вывода
- Очень простая операция Arduino Uno Serial.readString()
- DateTime в строку
- Как преобразовать строку в массив байтов
- Как отправить строку на мастер с помощью i2c
- Создание форматированной строки (включая числа с плавающей запятой) в Arduino-совместимом C++
Взгляните на соответствующий вопрос в stackoverflow: http://stackoverflow.com/questions/632846/clearing-a-char-array-c ..., @user3704293
Почему вы преобразуете массив символов в строку только для того, чтобы распечатать его? Ты хоть понимаешь, как это плохо для бедного маленького Ардуино? http://hacking.majenko.co.uk/the-evils-of-arduino-strings, @Majenko