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 über

    temp=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.


  • Administrator

    1. Wieso rohe C Arrays und keine std::string s?
    http://www.cplusplus.com/reference/string/
    2. Wieso fopen und nicht die C++ IO Streams?
    http://www.cplusplus.com/reference/iostream/
    3. fopen wie auch die Memberfunktion open eines fstream erwarten 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;
    }
    

Anmelden zum Antworten