PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stringdeklaration in C



19-09-2000, 09:47
Hallo zusammen,

habe mal wieder was nicht richtig kapiert! Und sicher weiß jemand von Euch da Rat. Wieso gibt es in C keinen eigenen Datentyp für Zeichenketten bzw. warum muß man Zeichenketten in der Art deklarieren muß?

char meldung[]="Hallo, Welt!";

Soweit ich das bisher verstanden habe wird hier doch ein Feld des Typs char deklariert bzw. in meinem Beispiel auch gleich definiert. Warum ist es nicht sinnvoller einen eigenen Typ zu verwenden und statt dessen sozusagen jedes Zeichen "extra" in einem Feld abzulegen?

Gruß und schon mal Danke für Eure Erläuterungen

Stefan

thommy
19-09-2000, 09:57
Die Datentypen der Programmsprache C richten sich sehr stark nach den Hardwareeigenschaften. Die kleinste adressierbare Einheit ist ein Byte, somit ist ein Zeichen "char" genau ein Byte lang. Die Größe der anderen Datentypen hängt von der Datenbreite der Speicherzellen ab. Bei einem 286er bspw. war der Integer 16 Bit lang, ab 386 sind es 32 Bit und auf einer Alpha ist er gar 64 Bit groß.

Das "Günstige" an diesen Datentypen ist, dass man bei ihrer Deklaration genau weiß, wie viel Speicherplatz für sie zu reservieren sind. Von einem Datentyp String erwartest Du aber, dass Du ihm jede beliebige Zeichenkette zuweisen kannst. Das Problem ist aber, dass der Compiler nicht entscheiden kann, wie viel Speicherplatz vorab für diesen zu reservieren ist. Das weiß nur der Programmierer und demzufolge muss er Zeichenketten mit den - ich nenns mal so - "vom Compiler entscheidbaren Mitteln" ausdrücken.

C++ liegt ein völlig anderes Konzept zugrunde, so dass es dort den Typen String gibt. Allerdings geht das auf Kosten der Effizienz, ein C-Programm wird meist schneller laufen als ein vergleichbares C++-Programm.

Thomas

[Dieser Beitrag wurde von thommy am 19. September 2000 editiert.]

19-09-2000, 10:09
Danke Thommy,

vor allem für die superschnelle Antwort!

Stefan

19-09-2000, 11:24
Hiho thommy,

Da muss ich dir leider ein bischen wiedersprechen! Strings bei C++ sind fast so schnell wie Strings unter C (kommt auf die Implementierung der Stringlib an!).

Bei C++ Strings braucht man sich nicht mehr um die Grösse und um das Nullzeichen am ende zu kümmern das erledigt alles die Stringlib. Natürlich kann man noch zusätzlich die alten C String Funktionen benutzen, aber dann aufpassen.

Die C++ Strings gehören zu den Templets, diese vereinfachen einige der Programmieraufgaben unter C, wie z.B. Spools, Verkettungen usw, also alles was mit der Verwaltung der Daten zu tun hat. Es ist auf jedenfall lohnenswert sich damit zu beschäftigen.

Bis Bald

Henning Wackernagel