Hilfe bei fopen



  • Hi,

    ich habe ein Programm in c++ geschrieben, das eine Matrix aus einer Textdatei per Dateipfad und mithilfe des Befehls fopen. Die Code besteht aus 2 funktionen, in einer wird die Matrix eingelesen und in main wird sie potenziert und ausgegeben.

    Jetzt zu meiner Frage: fopen funktioniert so wie ich es verstanden habe, nur wenn der erste Argument vom Typ const char ist(f=fopnen("pfad der Textdatei","r")).
    Ich habe versucht den Pfad per Eingabeaufforderung variabel zu programmieren, sprich man soll den Pfad per Hand eintippen. Ich habe es nicht hinbekommen, es wird immer ein Fehler ausgegeben, dass const char nicht zu const char konvertier werden kann! Auch wenn ich in der Funktion den Pfad speichere(nur halt nicht in fopen, sondern davor und versuche dann dadrauf zuzugreifen) kommt die Fehlermeldung.

    Hat jemand Erfahrung mit fopen oder vielleicht ähnliche Probleme damit?
    Ach ja ich hab es fast veressen zu erwähnen ich bin c++ Anfänger 😉

    Vielen Dank im Voraus.

    MfG redson



  • Bist du sicher dass du C++ machst? fopen ist eigentlich C - in C++ wird sowas eigentlich mit fstreams gemacht. Falls du C programmierst bist du im falschen Forum gelandet.

    Gib uns mal bitte den relevanten Code und die genaue Fehlermeldung.



  • fopen ist veraltet. Es existiert nur wegen C-Kompatibilität. In C++ nimmt man besser ofstream/ifstream: http://www.cplusplus.com/doc/tutorial/files/



  • Meinst du vielleicht, dass "char *" nicht in "const char *" konvertiert werden kann ?

    char * Normal;
    const char * Konstant;
    Konstant = const_cast<const char*>(Normal)
    

    Zeig halt mal ein bisschen Code 😉



  • Ich benutze Microsoft Visual C++ und ich hatte gehoft, dass ich c++ programmiere 🙂 Aber wie gesagt keine nennenswete Erfahrungen damit.

    Die Code ist folgende:

    void einlesen(int *m_p, string *filename)
    {
         FILE *datei;
         int p,k,x;
    
    	cout << "Geben sie deb Pfad zu der einzulesenden Matrix an :"<<endl;
    	scanf("%s",*filename );
    
        datei=fopen(*filename, "r"); 
    
        if (NULL==datei)
           {
                        cout << "Konnte Datei nicht oeffnen"<< endl;
           }
    
           for (k=0; k<3;k++)
               {
               for (p=k*3; p<(k*3 + 3);p++)
                  {
         fscanf(datei," %d; %d; %d; \n; %d; %d; %d; \n; %d; %d; %d; \n ", &m_p[p]);
                   }
                   cout <<endl;
               }
    }
    

    Und die Fehlermeldung ist :error C2664: 'fopen': Konvertierung des Parameters 1 von 'std::string' in 'const char *' nicht möglich

    Bei einer anderen Version der Code habe ich auch eine Fehlermeldung bekommen, dass const char nicht in const char konvertiert werden kann.

    Danke erst mal für die schnellen Antworten.
    Lässt sich diese Problemstellung gar nicht mit fopen lösen, weil es für mich mittelschwere Katastrophe wäre, wenn die Code nichts taugt, hab lange dran gesessen. 😞

    MfG redson



  • Hab gerade die Version mit der Fehlermeldung: const char nicht in const char* konvertierbar gefunden.

    Hier kommt die:

    void einlesen(int *m_p, const char filename)
    {
    
         FILE *datei;
         int p,k;
    
         const char filename={"C:\\Users\\user1\\Matrix.txt"};
    
        datei=fopen(filename, "r");
        if (NULL==datei)
           {
                        cout << "Konnte Datei nicht oeffnen"<< endl;
           }
    
           for (k=0; k<3;k++)
               {
               for (p=k*3; p<(k*3 + 3);p++)
                  {
                         fscanf(datei," %d; %d; %d; \n; %d; %d; %d; \n; %d; %d; %d; \n ", &m_p[p]);
                   }
                   cout <<endl;
               }
    }
    

    Hab jetzt einfach filename deklariert ohne einzulesen, funktioniert trotzdem leider nicht.

    MfG redson


Anmelden zum Antworten