C++ Char-Variablen automatisch erstellen

kingdodo

Lt. Junior Grade
Dabei seit
Feb. 2006
Beiträge
474
Guten Tag zusammen,

Ich benötige in einem Programm eine Funktion, die eine frei wählbare Anzahl an Variablen erzeugt.

zur Verdeutlichung:
-Zahl einlesen
-anhand der eingelesen Zahl so viele Variablen des Typs Char anlegen.

Beispiel:
-Zahl=3
-Variablen= wort1,wort2,wort3

wobei "wort" vorgegeben ist, aber immer um eine Zahl erweitert wird.

Ich hoffe, dass ich mein Problem verständlich ausgedrückt hab ;-)
 

Gluehwurm

Cadet 4th Year
Dabei seit
Nov. 2006
Beiträge
95
Malloc
/edit oder new /edit
 
1

1668mib

Gast
Naja ein dymanisches Array wäre hier eine Variante...
aber da kannst du dann nicht wort3 sondern eher wort[3] (bzw wort[2], da Zählung bei 0 beginnt) machen.
 
C

claW.

Gast
Code:
#include <iostream>

using namespace std;

int main( int argc, char **argv, char **env )
{
  unsigned int num;
  cout << "Anzahl eingeben: ";
  cin >> num;
  
  /* für einzelne zeichen - eindimensionaler zeiger benötigt */
  char *wort = new char[num]; /* array erstellen */
  
  /* für verschiedene wörter - zweidimensionaler zeiger benötigt */
  const unsigned int wortlaenge = 255;
  char **wort = new char *[num]; /* new char *[], da ein zeiger allokiert werden soll und kein einzelnes zeichen */
  for( unsigned int i = 0; i < num; i++ )
    wort[i] = new char[wortlaenge];
  
  /* hier damit arbeiten */
  
  delete wort; /* mit new allokierte daten wieder freigeben */
}
ungetestet
 

gruffi

Banned
Dabei seit
Juli 2006
Beiträge
2.502
Wieso einfach, wenn es umständlich geht? Für sowas bietet C++ Container wie std::vector und std::string an. Von manueller Speicherreservierung via new sollte man am besten die Finger lassen. Ua, weil das nicht exception safe ist.
 

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
@claW.: Müssen ned auch die einzelnen Arrayelemente mit delete wieder gelöscht werden um wirklich sämtlichen Speicher freizugeben? (Das soll keine rhetorische Frage sein; ich bin mir selbst grad nicht sicher.)
 
C

claW.

Gast
weiß ich net, denn chars verwende ich so gut wie keine. ich weich irgendwie möglich immer auf strings um, da chars allein mir gehörig auf den zeiger gehen. gut möglich also, dass man jedes element nochmal selbst freigeben muss. man könnte es ja ausprobieren, indem man dies 100 mal durchlaufen lässt und nachsieht ob der speicher auch korrekt freigegeben wird, aber dazu bin ich im moment zu faul. ;)

@ gruffi:
stimmt auch wieder, aber wieso sollte man sich mit sowas rumquälen, wenn es denn auch mit einfachen arrays geht? ;) die chars musst du ja so oder so erstellen, wodurch das eigentliche problem ja nicht behoben wird.
 

gruffi

Banned
Dabei seit
Juli 2006
Beiträge
2.502
Container sind idR immer einfacher handhabbar. Eine Qual ist eher wie in deinem Beispiel die händische Vorgehensweise. Und wie gesagt, Container bieten weniger potenzielle Fehlerquellen. Alleine deswegen sollte man sie nutzen. Die Verwendung von new/delete/*alloc/free macht nur dann Sinn, wenn man eine eigene bzw angepasste Speicherverwaltung benötigt.
 
1

1668mib

Gast
@claW.: Ich bin mir nicht mal sicher ob ein mehrdimensionales Array gebraucht wird...
Eine Variable vom Typ Char ist eigentlich kein Pointer...
 

kingdodo

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
474
Hab das Problem jetzt gelöst. Habe einfach 2-Dimensionale Arrays genommen.

Trotzdem danke für eure Hilfe
 
Top