Как очистить содержимое строки в Arduino?

В настоящее время я преобразую символы в полученном символе[20] в строку, используя строку randomString(получена), и я могу отобразить ее с помощью Serial.println(случайная строка). После отображения строки я хотел бы знать, как проще всего очистить ее содержимое.

, 👍0

Обсуждение

Взгляните на соответствующий вопрос в stackoverflow: http://stackoverflow.com/questions/632846/clearing-a-char-array-c ..., @user3704293

Почему вы преобразуете массив символов в строку только для того, чтобы распечатать его? Ты хоть понимаешь, как это плохо для бедного маленького Ардуино? http://hacking.majenko.co.uk/the-evils-of-arduino-strings, @Majenko


3 ответа


2

В C и C++ массив символов, заканчивающийся нулем, является строкой (хотя и не строкой). Многие процедуры для считывания входных данных завершают результат нулем, как и такое назначение, как"

char foo[] = "This is a string.";

Все, что вам нужно будет сделать, чтобы "очистить" эту строку, - это присвоить нулю первый символ. Например:

foo[0] = '\0';
,

При этом очищается только первый байт. С помощью = { 0 }; все очищено., @ott--

Для строк C (с нулевым окончанием), если первый символ равен нулю, то строка пуста или пуста. Функционально это решает проблему, но если есть проблемы с безопасностью, то вы правы, что вся строка должна быть очищена., @dlu


0

Первая версия с преобразованием из 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)); 

Ура!

,

0

Хотя это старый вопрос, я решил вмешаться. Если бы я потратил время, чтобы правильно понять вопрос, я полагаю, что вы хотели очистить содержимое строки, а не массива символов. Это может помочь тем, кто хотел очистить строку по другим причинам.

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