S
Letzte Frage: Wie lang darf denn ein const char * maximal sein?
Ein char const* ist ein Zeiger. Zuerst mal kein String. Sein Wert ist eine Speicheradresse. Erst wenn du diesem Zeiger etwas entsprechendes zuweist, kannst du ihn als "String" betrachten, weil er dann auf eine nullterminierte Folge von Bytes (einen NTBS) verweist, die Zeichencodes o.ä. sind.
Vielleicht war deine Frage, wie lang kann ein (echtes) char -Array sein. Das ist vom Standard nicht vorgegeben - Anhang B, implementation quantities, schreibt eine Höchstzahl für Array-Bounds nicht vor. Aber er darf nicht besonders groß sein, da es auf dem Stack liegt. Und der ist meistens etwa ein, zwei MiB groß.
Ein C-String, der auf dem Heap liegt, muss irgendwie allokiert worden sein. std::string bswp. hat eine Memberfunktion max_size() . Diese gibt einen vom Standard in keinster weise definierten Wert zurück.
GCC schreibt im Header:
// The maximum number of individual char_type elements of an
// individual string is determined by _S_max_size. This is the
// value that will be returned by max_size(). (Whereas npos
// is the maximum number of bytes the allocator can allocate.)
// If one was to divvy up the theoretical largest size string,
// with a terminating character and m _CharT elements, it'd
// look like this:
// npos = sizeof(_Rep) + (m * sizeof(_CharT)) + sizeof(_CharT)
// Solving for m:
// m = ((npos - sizeof(_Rep))/sizeof(CharT)) - 1
// In addition, this implementation quarters this amount.
Allerdings ist das nicht ausschlaggebend, sondern im Endeffekt der Arbeitsspeicher (oder wie viel die OS-spezifische API da hergibt).