Seite 1 von 1

fread Problem

Verfasst: Fr Nov 18, 2011 10:25 pm
von naums
Hallihallöchen,

habe ein klitze kleines fread Problem, was in folgendem Codeteil die Variable "Content" nicht ordentlich füllt, was bei content in der for schleife nen SegFault hervorruft bzw. unter Windows einfach das Programm abstürzen lässt. Wie gehts mal richtig mit fread um? Ich will, dass die gesamte Datei geladen wird, egal wie groß die ist. Und ich will außerdem, dass ALLES davon in die Variable content wandert. Das das unweigerlich zu Problemen führen wird vor allem, da content ein Zeiger ist ist mir durchaus bewusst. Da lass ich mir noch irgendwas einfallen ^^.

Code: Alles auswählen

   
    char* content=0;
    ParserState state=NONE;
    FILE* inifile = fopen (filepath, "r");
    if (inifile)
    {
        fread (content, 8, 100, inifile);
    }
    else
    {
        state=ERROR;
    };
    
    int begin=0;
    for (int i=0; content && content[i]; i++)
    {


/// ...

    };
PS, Filepath existiert, ist vorhanden und mit Inhalten gefüllt. Außer C sieht "[" nicht als Inhalt, aber davon geh ich mal net aus. Was mach ich verkehrt?

MfG Naums

Re: fread Problem

Verfasst: Fr Nov 18, 2011 10:29 pm
von Xin
Man darf vermuten, dass 'content' akzeptabel gefüllt wird und er deswegen abschmiert.

content zeigt auf Null. Bei Null hast Du nichts zu suchen und schon gar nix zu schreiben.

Re: fread Problem

Verfasst: Fr Nov 18, 2011 10:32 pm
von naums
Ähm, das problem hängt nicht direkt mit fread zusammen. Wenn man dahinter ein printf("hallo") hat gibt er das Hallo aus, bevor das Programm abschmiert.

Edit: so schmiert das Programm nicht ab, tschuldigung.

Man entferne das content && aus der for-Bedingung und dann hat man ihn wieder - den Crash:

Code: Alles auswählen

   
    char* content=0;
    ParserState state=NONE;
    FILE* inifile = fopen (filepath, "r");
    if (inifile)
    {
        fread (content, 8, 100, inifile);
    }
    else
    {
        state=ERROR;
    };
    
    int begin=0;
    for (int i=0; content[i]; i++)
    {


/// ...

    };
So wie er ganz oben steht crasht das Programm zwar nicht, macht aber auch überhaupt goarnix.

Re: fread Problem

Verfasst: Fr Nov 18, 2011 11:35 pm
von cloidnerux
So wie er ganz oben steht crasht das Programm zwar nicht, macht aber auch überhaupt goarnix.
fread legt KEINEN pointer an, sondern schreibt nur in content.
Das bedeutet, fread schreibt an stelle 0 iwas, und dann versuchst du in deiner for-schleife so lange durch deinen RAM zu suchen, bis du dein "\0"-Byte findest, das iwo liegen sollte, aber pech gehabt, du liest gerade iwas im RAM nur nicht das, was du willst^^
Schau dir mal "malloc" an und überlege dir, wie man das mit deinem Problem sinnvoll verwursten kann.-

Re: fread Problem

Verfasst: Sa Nov 19, 2011 10:44 am
von naums
umständlich, umständlich. Aber klappt. Programm stürzt jetzt auf jedenfall nicht mehr ab. Danke :)

PS: das fread - wie krieg ich es dazu die ganze Datei einzulesen bzw. was liest es jetzt überhaupt?

Code: Alles auswählen

fread (content, 8, 100, inifile);
MfG Naums

Re: fread Problem

Verfasst: Sa Nov 19, 2011 12:30 pm
von Xin
naums hat geschrieben:umständlich, umständlich. Aber klappt. Programm stürzt jetzt auf jedenfall nicht mehr ab. Danke :)

PS: das fread - wie krieg ich es dazu die ganze Datei einzulesen bzw. was liest es jetzt überhaupt?

Code: Alles auswählen

fread (content, 8, 100, inifile);
Finde die Größe mit fseek raus.

Jetzt liest es bis zu 800 Bytes aus der Datei. (Blocksize * Anzahl der Blöcke)

siehe fread im Wiki ^^

lmwtfy? - let me wiki that for you?