Anfaengerfrage



  • FabianR schrieb:

    ich habe eine Frage bzgl. diesen zwei folgenden Methoden:

    Bitte, auch wenn man Code sinnvoll kürzen sollte, schreib zumindestens soviel das man sieht was dein Problem ist. Du schreibst zwar Methoden, was für mein Verständnis Funktionen von Klassen sind, aber zum einen sieht man weder den Klassenbezug noch einen vollständigen Funktionskopf, sondern nur ungültigen Code.

    FabianR schrieb:

    CPP-File (file.cpp)

    void method1
    {
    

    Das ist weder eine Funktion- noch ein Methode. Gib mindestens soviel Code mit an wie für das Problem nötig ist. Und ist deine Variable im Header nun ein Member einer Klasse, eine globale Variable oder was? (zumindest den Klassenrumpf sollte man schreiben).

    Sobald du einen Minimalcode (das ist deiner nicht, der ist noch nicht mal Minimal sondern garnichts) präsentierst, kann man dir auch mehr helfen 😉

    Grundsätzlich aber eins: Einem Zeiger kannst du nicht einfach einen lokalen Speicherbereich zuweisen (Stichwort Allozierung[new]/Dealozierung[delete]). Und wie schon erwähnt: Verwende wenn möglich std::string statt char-Zeigern und char-Arrays...

    cu André
    P.S: Zudem benutze bitte statt die Code-Tags die C/C++-Tags...



  • Ok danke, ich werde das naechste Mal darauf achten :). Ich moechte diese String-Variante aber umgehen, soll heissen ich moechte die Loesung in char*-Form, oder ist das in diesem Fall viel schwieriger?



  • warum möchtest Du nicht std::string benutzen?



  • unwesentlich
    du musst nur darauf achten was du den zeiger auf allokierten speicher zeigen laesst
    derzeit zeigt der auf eine temporaere variable die verschwindet am ende der funktion
    einfach

    m_File = new char[count]
    // zuweisung
    
    oder spaeter irgendwo
    
    delete [] m_File;
    m_File = NULL;
    

    also entweder gleich allokieren und damit arbeiten, oder mit fileName arbeiten und dann allokieren und zuweisen



  • Wenn du das unbedingt willst, hast du zwei Möglichkeiten:

    a) Du machst aus m_File einen char-Array, musst dafür aber halt die maximale Größe zu Kompilierzeit wissen.

    b) Du forderst den nötigen Speicher an zur Laufzeit. Und natürlich später wieder mit delete[] freigeben.

    void method1(...)
    {
       char fileName[100];
    
       ...
       //Ermittlung des Filenamen
       ...
    
       m_File = new char[strlen(fileName)+1];
       strncpy(m_File, fileName, strlen(fileName)+1);
    }
    


  • FabianR schrieb:

    Ich moechte diese String-Variante aber umgehen, soll heissen ich moechte die Loesung in char*-Form, oder ist das in diesem Fall viel schwieriger?

    Vorgabe von einen Lehrer, oder einfach Masochistisch veranlagt? Sorry, aber warum muss man sich eigentlich immer wieder mit Zeigerarithmetik rumschlagen, wo es wirklich nicht sein muss (std::string gehört zum C++ Standard).

    cu André



  • Richtig getippt, Vorgabe des Lehrers, sorry 🙂 .

    Danke fuer eure Hilfe.



  • asc schrieb:

    Vorgabe von einen Lehrer, oder einfach Masochistisch veranlagt? Sorry, aber warum muss man sich eigentlich immer wieder mit Zeigerarithmetik rumschlagen, wo es wirklich nicht sein muss (std::string gehört zum C++ Standard).

    Weil Lehrer, Profs und Buchautoren doof sind? 😃 Ich bin der letzte der sagen würde, man muß sich nicht mit Array und Pointer beschäftigen, aber es gibt anscheinend immer noch Menschen, die meinen einen Anfänger damit zuschmeissen zu müssen.



  • Wenn du siehst wie überlaufen Informatikstudiengänge heutzutage sind, da ist das eine gute und beliebte Möglichkeit um auszusieben. 😉



  • Fellhuhn schrieb:

    Wenn du siehst wie überlaufen Informatikstudiengänge heutzutage sind, da ist das eine gute und beliebte Möglichkeit um auszusieben. 😉

    Wo sind die überlaufen? Sorry, aber ich höre immer etwas von einem Mangel...

    cu André
    P.S: Und das entschuldigt nicht das die Dozenten auf einen Stand vor 10+ Jahren arbeiten. Mit Zeigern kann man die Schüler/Studenten noch immer anderweitig zur Verzweiflung bringen.



  • Zum Beispiel in Bremen. Wo sich jedes Jahr mehr als 1.000 zuviel bewerben und auch immer genommen werden. An Informatikern die am Ende mit Diplom herauskommen und tatsächlich auch was können, an denen mangelt es wirklich.


Anmelden zum Antworten