Konstante Pi stimmt nicht...



  • Mein Tipp ist, dass dein Puffer (temp) für den Dateinamen überläuft, oder gibst du wirklich nur 9 Zeichen ein? Dadurch wird die Konstante überschrieben ... Die professionelle, saubere Lösung ist kompliziert, für den Moment würde ich dazu raten, den Puffer einfach ausreichend groß zu machen.
    Davon abgesehen glaube ich, dass deine Variable datei als Zeiger auf ein 10er-Array gedacht war. So ist es ein Array von 10 char-Zeigern, wobei du immer nur das erste Element benutzt. Ändere das mal in char* datei; und ändere alle Stellen, an denen *datei steht in datei (ohne Dereferenzierungsoperator.)



  • ein double const PI=3.14159265; sollte wegen des 'const' eigentlich in einem read-only bereich landen und von buffer-overflows verschont bleiben (d.h. programm stürzt ab beim schreibversuch). mal abgesehen davon, dass die zu kleinen arrays sowieso ein problem sind, mach's doch so:

    #define PI 3.14159265
    

    🙂



  • Undertaker schrieb:

    ein double const PI=3.14159265; sollte wegen des 'const' eigentlich in einem read-only bereich landen

    Hier offensichtlich nicht
    🙂



  • Tim schrieb:

    Nur damit ich das recht verstehe: Du hast ein Problem mit der Ausgabe von PI, gibst uns auf Nachfrage aber einen Code der Wunder was macht, aber nicht PI ausgibt?

    Ja, ich habe den aktuellen Code hier einfach reinkopiert, weil es gefordert wurde. Dieser enthält aber nicht mehr die zweite Zeile des Codes vom Anfangspost,
    sprich "printf("\n %f",PI);", weil dieser ja einen Fehler ausgab und ich das Pi-Problem erstmal beiseite geschoben habe...

    Undertaker schrieb:

    ein double const PI=3.14159265; sollte wegen des 'const' eigentlich in einem read-only bereich landen ...
    🙂

    Hmm..ja, ne 😉 keine Ahnung...

    Arrays passen bisher, weil es eine Berechnung ist, welche feste Werte hat!
    Damit meine ich, das die Länge durch ein bestimmtest max. gegeben ist, die Anzahl der Werte feststeht und auch der Dateiname ist gegeben.
    Von daher gibt es da noch was zu tun, was Fehleingaben und dergleichen anbetrifft, aber die eigentlich Rechnung funktioniert soweit. Problem ist halt nur, das ich nicht mit der Konstanten Pi arbeiten kann.
    Kein wirkliches Problem, aber auch nicht befriedigend 😉

    danke schonmal



  • #include <stdio.h>
    
    int main()
    {
        double const PI=3.14159265;
        printf("%f\n",PI);
        return 0;
    }
    

    was kommt denn raus, wenn du das kompilierst und ausführst?



  • das klappt



  • Hör auf den Tipp von Bashar!!
    Dann dein nächster Fehler:

    char *datei[10];
    

    Was soll das sein? Wie verwendest du es dann unten? Zehn Pointer auf char? Die zudem nicht mal belegt wurden.
    Wie lang ist dein Dateiname übrigens?



  • werde ich gleich mal antesten @tip...

    die datei soll eigentlich 8.3 sein...

    und die Pointer Geschichte habe ich mir ohne weitere Logik durch Probieren zurechgefriemelt, wenn ich ehrlich bin...daher die [10] dahinter, weil es vorher ne normale Var sein sollte mit der max länge von 10 (zumindest dachte ich es so)



  • Headbreaker schrieb:

    werde ich gleich mal antesten @tip...

    die datei soll eigentlich 8.3 sein...

    und die Pointer Geschichte habe ich mir ohne weitere Logik durch Probieren zurechgefriemelt, wenn ich ehrlich bin...daher die [10] dahinter, weil es vorher ne normale Var sein sollte mit der max länge von 10 (zumindest dachte ich es so)

    Wenn dann:

    char datei[10];
    

    oder

    char *datei=malloc(10);
    

    Ist dein Dateiname länger, werden dahinterliegende Daten überschrieben, das ist das Problem. Mache alle Puffer wie Bashar sagte ausreichend groß. Entweder per Array oder malloc. Stichwort: BufferOverflow.



  • Danke, werde ich berücksichten...



  • hmm 8+3=11



  • In dem Fall sogar 8+3 = 12. Der Punkt ist ja auch noch ein Zeichen, nicht wahr?

    EDIT: eventuell sogar 13, wenn´s nullterminiert ist.


Anmelden zum Antworten