Как назначить строковую переменную StackString на основе библиотеки StackString?
Я пытаюсь использовать StackString-библиотеку, которая предлагает не съедать оперативную память с течением времени, переназначая значения строкам. Я начал с нуля и написал очень простой демокод, который работает. Затем я добавил присваивание переменной STackString из обычной строки или функции со строкой возвращаемого значения См. код ниже Если я попытаюсь скомпилировать Я получаю ошибку компилятора, говорящую , что нет совпадающей функции для вызова 'Stack::StackString<50>::append(String&)'<50>
вот код
#include <StackString.hpp>
using namespace Stack; // очень важно иметь эту строку кода. В противном случае код не будет компилироваться
StackString<50> myString = StackString<50>("Hello, World!");
String NormalString = "1234Test";
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println();
Serial.println(myString.c_str());
myString.prepend("Everybody say: ");
Serial.println(myString.c_str());
myString.append(" How are you doing?");
Serial.println(myString.c_str());
Serial.println();
//myString = NormalString;
myString.append(NormalString);
}
void loop()
{ // поместите свой основной код сюда, чтобы он запускался многократно:
}
Нужно ли мне делать типизацию? а если да, то как это выглядит? Что я хочу сделать, так это присвоить StackString новое значение. Это означает, что строка STackString находится в левой части оператора назначения"=". Я пробовал разные варианты безрезультатно.
Может ли это быть проблемой специальной конструкции как "пространства имен" ? Ни малейшего понятия
вы найдете STackString-библиотеку здесь: https://gitlab.com/arduino-libraries/stackstring
с наилучшими пожеланиями
Стефан
@StefanL38, 👍-1
Обсуждение1 ответ
StackString
не знает, что такое строка
. Функция добавления
принимает только символ const *
, символ const
или int
:
void append(const char* string);
void append(const char character);
void append(int number);
Вы можете достаточно легко получить константу char *
из строки
с помощью .c_str()
, поэтому используйте это в добавлении:
myString.append(NormalString.c_str());
Также нет простого назначения (или полной замены содержимого) с помощью StackString
- сначала вы должны "очистить" строку. Поэтому, чтобы заменить содержимое на то, что находится в NormalString,
вам нужно:
myString.clear();
myString.append(NormalString.c_str());
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- форматирование строк в Arduino для вывода
- Очень простая операция Arduino Uno Serial.readString()
- DateTime в строку
- Как преобразовать строку в массив байтов
- Как отправить строку на мастер с помощью i2c
- Создание форматированной строки (включая числа с плавающей запятой) в Arduino-совместимом C++
Действительно ли массивы символов настолько устрашающи, что люди идут на такую длину, чтобы избежать их? Зачем бороться с этим, если вы можете просто написать массив символов и покончить с этим?, @Delta_G
Вы пишете это с позиции эксперта о массивах символов, c-строк и т. Д. Это ничего не объясняет, чтобы приблизиться к точке достаточного знания, чтобы использовать предпочтительный способ использования "строк". Поэтому гораздо более продуктивным комментарием было бы объяснить, как это работает. Не с самой короткой и элегантной строкой кода, а с тщательно объясненным примером с большим количеством комментариев или дополнительного текста., @StefanL38