Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.06.2012, 09:38

Dynamische Strings

Guten Morgen, leider findet man im Internet nicht immer die gewünschten Informationen, gerade Tutorials sind oftmals mehr als schelcht und werfen mehr Fragen auf als sie beantworten können. Deshalb dachte ich, ich könnte hier ein paar Fragen stellen.

Bisher habe ich mit char Arrays gearbeitet, allerdings sind sie statisch und verbrauchen deshalb mehr Speicher als eigentlich benötigt wird. Gibt es eine Möglichkeit char Arrays zu vergrößern oder zu verkleinern oder MUSS ich Pointer benutzen? Mich interessiert hierbei ledeglich Effektivität und Einfachheit, mir ist es deshalb egal was jemand meint, wie man etwas als C++ Programmierer ideologisch zu lösen hat. Ich benutze auch z.B. Strukturen anstatt Klassen, ganz einfach weil sie für meine Zwecke unattraktiv sind und versuche lokale Variablen so gut wie es geht zu vermeiden, da sie für mich in den meisten Fällen nur unnötigen Speicherverbrauch darstellen. (Nebenbei am Rande, gibt es eine Möglichkeit Variablen in Strukturen gleich bei der Deklarierung einen Wert zuzuweisen, sodass ich nicht auf "Initalisierungsfunktionen" zurück greifen muss?)

Ich weiß auch nicht ob es so eine gute Idee ist auf reines C zurück zu greifen, ich selber brauche den objekt-orientierten Kram nicht aber ich weiß nicht ob einige Bibliotheken ihn brauchen, auch wird oft davon abgeraten reines C zu benutzen. Wie auch immer, ich würde gerne mit einfachen Funktionen wie fprintf, strcpy, etc. arbeiten, denn ich finde die typischen C++ Funktionen auch sehr kryptisch in ihrem Gebrauch, sie bringen mir nichts, schränken dafür aber die Lesbarkeit von meinem eigenen Code meiner Meinung nach ein.

Edit: Vektoren brauchen C++, ohne die ist Schluss mit dynamischen arrays. o;

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »S. P. Gardebiter« (28.06.2012, 09:47)


Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.06.2012, 09:54

Nun, ich beginne mit meiner Meinung zu deinem letztem Absatz: Nach dem was du schreibst programmierst du scheinbar schon relatives reines C und jagst es durch den C++ Compiler. Dein Kommentar das du Strukturen benutzt weil Klassen unattraktiv wären verstehe ich allerdings überhaupt nicht, da

Quellcode

1
2
3
4
class XYZ { 
public: 
... 
};


und

Quellcode

1
2
3
struct XYZ { 
... 
};


in C++ schlichtweg das selbe ist. In C# sähe das ganz anders aus.

Zu deiner eigentlichen Frage: In normalem C/C++ haben Arrays eine fixe Größe und von daher wirst du um Pointer nicht herumkommen. Ich meine der gcc kann als nicht-standardmäßige Erweiterung auch mit Arrays mit einer erst zur Laufzeit bestimmten Größe umgehen in der Art:

Quellcode

1
2
 int groesse = BestimmeIrgendwieGroese (); 
char puffer[groesse];


Aber das ist halt nicht standardmäßig und ich weiß nicht, ob man so einen Array irgendwie in der Größe auch noch verändern kann.

Ach ja, der Edit: Du kannst ja immer noch malloc/realloc/free benutzen. :P
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Legend« (28.06.2012, 10:01)


Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

28.06.2012, 09:57

meines Wissens ist std::String eine Klasse, die du dir anschauen solltest


bisher kann ich aus deinem Beitrag nicht herauslesen, warum du Objektorientierung nicht verwenden willst bzw. warum du diese ungeeignet findest
das dürfte wohl darin begründet sein, dass das auch nicht das eigentlich Thema ist, sondern nur eine Randnotiz darstellt

ich für meinen Teil habe ohne Objektorientierung angefangen und mich erst später mit dieser auseinander gesetzt
mitlerweile sehe ich in dem Nichtvorhandensein eher einen Nachteil, als einen Vorteil

allerdings ist das ein ganz anderes Thema und sollte ggf. an anderer Stelle ausdiskutiert werden
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sacaldur« (28.06.2012, 11:42)


4

28.06.2012, 10:26

Danke, auch im Chat wurde mir zu std::string geraten, ich werde mir das mal anschauen.

Ich hab schon etwas Erfahrung mit objektorientierter Programmierung, ich arbeite regelmäßig mit VB.NET und manchmal auch mit C#, da läuft aber alles komplett anders ab als in C/C++. ;)
Ich programmiere ausschließlich prozedural und greife nur auf objektorientierte Programmierung zurück, falls es wirklich nötig ist. Das hat Vorteile und Nachteile, für mich überwiegen aber die Vorteile und ja, das gehört nicht in dieses Thema hinein, kannst ja gerne ein Diskussionsthema dafür eröffnen, dann beteilige ich mich auch gerne.

Edit: std::string funktioniert hervorragend.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

29.06.2012, 16:39

Hab die C vs. C++ Diskussion mal abgetrennt: Effizienz von C vs. C++

Werbeanzeige