Yes you can - if the text is already known at coding time
you can store your strings if they don't change in program space - Check PROGMEM
here is a bit of code to study
char message1[] = "Text in SRAM, can change: ABCDEFGH";
const char message2[] PROGMEM = "Text in flash memory, locked: ABCDEFGH";
void setup() {
unsigned int message1Length, message2Length;
message1Length = strlen(message1);
message2Length = strlen_P(message2); // The strlen_P() function is similar to strlen(), with a pointer to a string in program space
Serial.begin(115200);
Serial.println("Displaying ASCII CHAR");
Serial.println("****************");
Serial.print("message1=[");
for (int i = 0; i < message1Length; i++) Serial.print(message1[i]); // print each char
Serial.println("]");
Serial.print("message2=[");
for (int i = 0; i < message2Length; i++) Serial.print((char) pgm_read_byte_near(message2 + i)); // print each byte as char
Serial.println("]");
Serial.println("\n\nDisplaying ASCII CODE");
Serial.println("****************");
Serial.print("message1=[");
for (int i = 0; i < message1Length; i++) {
Serial.print((byte) message1[i]); // print each char code
Serial.print(" "); // print a space
}
Serial.println("]");
Serial.print("message2=[");
for (int i = 0; i < message2Length; i++) {
Serial.print(pgm_read_byte_near(message2 + i)); // print each byte (as byte)
Serial.print(" "); // print a space
}
Serial.println("]");
}
void loop() {}
There are limits to array sizes to what a 2 byte pointer can index and of course physical memory