Как назначить строковую переменную 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

с наилучшими пожеланиями

Стефан

, 👍-1

Обсуждение

Действительно ли массивы символов настолько устрашающи, что люди идут на такую длину, чтобы избежать их? Зачем бороться с этим, если вы можете просто написать массив символов и покончить с этим?, @Delta_G

Вы пишете это с позиции эксперта о массивах символов, c-строк и т. Д. Это ничего не объясняет, чтобы приблизиться к точке достаточного знания, чтобы использовать предпочтительный способ использования "строк". Поэтому гораздо более продуктивным комментарием было бы объяснить, как это работает. Не с самой короткой и элегантной строкой кода, а с тщательно объясненным примером с большим количеством комментариев или дополнительного текста., @StefanL38


1 ответ


0

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());
,