Оперативная память ценный ресурс, а Flash память программ не часто используется на 100%. Строковые литералы засоряют оперативную память даже если они используются для объявления переменных и констант локально.

Строковые литералы можно хранить в Flash памяти. На плате Arduino UNO, NANO и им подобных установлен микроконтроллер ATmega328 / P. М-к ATmega328 содержит 32 Кбайт Flash-памяти программ, 1 Кбайт энергонезависимой памяти (EEPROM), 2 Кбайт оперативной памяти (SRAM).

Пример, сохраняем строку в Flash памяти микроконтроллера, а восстанавливаем отдельные слова по индексу, как из строкового массива:

PROGMEM const char words[] = "DROP DUP SWAP OVER ROT ROT AND OR NOT XOR 1+ 1- - + * NEGATE ABS / MOD /MOD";

String input_word(int n) {
  char buf[16] = "Not Found";
  int i = 0;  // Счётчик букв в PROGMEM const
  int j = 0;  // Счётчик пробелов
  int k = 0;  // Счётчик букв в buf
  char a = 'x';
  while (a != 0) {
    a = pgm_read_byte_near(words + i);
    if (j == n) {
      buf[k] = a;
      k++;
    }
    if (a == ' ') {
      j++;
    }
    if (j > n) {
      buf[k] = 0;
      break;
    }
    i++;
  }
  return buf;
}

void setup() {
  Serial.begin(9600);
  while (!Serial);  // wait for serial port to connect
  Serial.println("OK");
  for (int n = 0; n < 40; n++) {
    Serial.print(n);
    Serial.print(' ');
    Serial.println(input_word(n));
  }
}

void loop() {
}

 hcch