Dereferenzierte Zeiger und Dynamische Arrays
-
Hallo zunächst,
ich habe zunächst einmal vor, einen string einzulesen.
Das passiert dynamisch und ich erhalte einen Pointer zurück, welche auf den neu- anegelegten String zeigt.Soweit so gut.
Jetzt möchte ich, dass diese Datei per fopen verfügbar gemacht wird.Nun kann ich ja mit einem Pointer bzw. dereferenzierten Pointer nicht mit z.B. fopen arbeiten. Sprich:
fopen=((*p_text),"r+")Daher mein Gedanke: Den Inhalt des Pointers in ein char Array umzuladen um damit die Variable für die Funktion zu haben.
Nun dachte ich an eine Funktion pointer_to_string.
Diese Funktion bekommt die Adresse vom Pointer und die Länge des Strings(wurde beim Einlesen hochgezählt).Jetzt habe ich auch hier folgendes Problem:
Ich würde das ganze gerne ebenfalls dynamisch machen, indem ich übertemp=new char[laenge]mir ein neues Array mit der Länge meines Strings erschaffe. Doch dabei wird ja wieder die Adresse dieses Arrays in der Variable temp gespeichert.
Es erscheint mir wie ein Teufelskreis. Auch ich muss euch sagen, dass ich noch am Anfang des Programmierens stehe.Viele Grüsse.
-
Entschuldigung, aber ich habe gar keine Ahnung, wo dein Problem liegt

Hast du den String bereits eingelesen? Wenn ja, ist es ein c-string (also char*) oder ein c++-string (std::string <- den empfehle ich, wenn du C++ programmieren willst). So wie ich das herausgelesen habe, hast du dir eine eigene Funktion geschrieben, die den string einliest? Ziemlich seltsam.
Am besten, du postest mal den gesamten Codeausschnitt, dann koennen wir dir wohl am ehesten helfen.
-
1. Wieso rohe C Arrays und keine
std::strings?
http://www.cplusplus.com/reference/string/
2. Wiesofopenund nicht die C++ IO Streams?
http://www.cplusplus.com/reference/iostream/
3.fopenwie auch die Memberfunktionopeneinesfstreamerwarten einen Zeiger zu einem nullterminierten Array:char const*.Hakanai schrieb:
Auch ich muss euch sagen, dass ich noch am Anfang des Programmierens stehe.
Ziemlich offensichtlich

Grüssli
-
Danke für die Aufmerksamkeit zunächst

Ich habe es über einen c-string gemacht. Lerne es momentan so in der Schule : /
Ja, diese Funktion liest einen Text ein und erschafft jedes Mal einen neuen Speicherplatz, welcher also dynamisch wächst, je nachdem wieviel man eingibt.char* Text_einlesen(char* value,int* anzahl) { char eingabe = 0; int laenge = 1; char* temp = NULL; if(value != NULL) { //alten Speicher freigeben delete[] value; } else {} do { //1. Zeichen einlesen eingabe = _getche(); //2. neuen Speicher sichern laenge = laenge + 1; temp = new char[laenge]; //3. Daten in den neuen Speicher kopieren for(int index=0;index<(laenge-2);index++) { //3a. alter Speicher in neuen Speicher kopieren temp[index] = value[index]; } //3b. neue Zeichen hinzufuegen temp[laenge-2] = eingabe; //4. Alten Speicher freigeben delete[] value; //5. neuen Zeiger nach Value "verbiegen" value = temp; (*anzahl)=(*anzahl)+1; }while(eingabe != 13); //Text terminieren value[laenge-1] = '\0'; return value; }