• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[C]- variablentyp für string

Status
Für weitere Antworten geschlossen.
Werbung:
nein es gibt in c keine strings im eigendlichen
sinne, es sind arrays, die den string bilden.
 
Werbung:
Strings werden immer in Arrays gespeichert , Strings mit beliebiger Länge sind Arrays die über eine verkette Liste aneinander gehängt werden.

In der regel sind es trotzdem array die immer wieder vergrößert werden wenn nötig. Eine liste kommt hier nicht zum einsatz das das kosten/nutzen verhältnis nicht stimmt. Auf ein 1-4 Byte zeichen kämme jeweils ein (oder sogar zwei) 4 Byte pointer für das nächste (vorige) element.

Strings in c sind char (oder wchar_t) arrays die mit einem 0-Zeichen enden (stichwort: nullterminierte stings).
 
In der regel sind es trotzdem array die immer wieder vergrößert werden wenn nötig. Eine liste kommt hier nicht zum einsatz das das kosten/nutzen verhältnis nicht stimmt. Auf ein 1-4 Byte zeichen kämme jeweils ein (oder sogar zwei) 4 Byte pointer für das nächste (vorige) element.
Klar 1Byte-Listen sind verschwenderisch. Dachte bisher es werden größere Arrays angelegt und diese dann über eine Liste verbunden, weil bei einem resize ansonsten möglicherweise der ganze String kopiert werden muss.

Zumindest der C++ Standard schreibt aber wohl einen zusammenhängenden Speicherblock vor.


N43
 
Werbung:
Strings werden in der regel als volständig zusammenhängendes array gelagert. Das hat den entscheidenden vorteil das man eine konstante zugriffszeit auf die element des arrays hat. Der nachteil ist natürlich das vergrößern. Aber die meisten string klassen bieten dafür die möglichkeit bereits im voraus speicher zu reservieren damit der string nicht ständig kopiert werden muss. Für extrem lange inhalte ist aber auch ein string nicht mehr geeignet. Dann macht irgendwann eine liste sinn. Ein sinnvoller einsatz für eine verkettete String Liste wäre eine datenstruktur die text zeilenweise enthält (jede zeile ein element).

Wie du eine datenstruktur aufbaust ist allein deine sache. Das ist nirgendwo vorgegeben. Die standard bibliothek von C++ implementiert string zwar wie oben beschrieben aber du kannst dir ja eine eigene string klasse schreiben wenn es dir beliebt :p
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben