Klassische C- Strings wie in den Links beschrieben.
Das einzige Problem dabei ist halt dass man einen vorher festgelegten Puffer braucht. Die String Klasse umgeht das mit dynamischem Speicher. Was gerade eines der Probleme damit ist. Wenn man zwei Strings mit + aneinander-hängt wird ein neues String Objekt erzeugt und der Speicher der zwei alten Objekte freigegeben (man kann das u.U. durch reserve() begrenzen, aber das grundlegende Prinzip bleibt). Auf einem PC ist das höchstens ein Problem wenn man das sehr, sehr oft macht (Vergleich in C# zwischen String und StringBuilder), aber auf einem µC mit sehr begrenztem Speicher ist das meistens keine gute Idee.
Mit C-Strings kannst du sogar mehr machen, da die String Klasse nur eine sehr beschränkte Anzahl an Funktionen implementiert, gerade was die Formatierung und Konvertierung betrifft. Für manche Sachen muss man das Objekt also in einen C-String wandeln. Dann kann man auch gleich darauf verzichten.
Das wäre weniger ein Problem wenn es die die Standard C++ Funktion c_str() gäbe:
http://www.cplusplus.com/reference/string/string/c_str/
Die liefert einen Zeiger auf das interne Array des Objekts. Darauf kann man dann lesend zugreifen ohne neuen Speicher zu benötigen