fread Problem

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

fread Problem

Beitrag von naums » Fr Nov 18, 2011 10:25 pm

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
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fread Problem

Beitrag von Xin » Fr Nov 18, 2011 10:29 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: fread Problem

Beitrag von naums » Fr Nov 18, 2011 10:32 pm

Ä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.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: fread Problem

Beitrag von cloidnerux » Fr Nov 18, 2011 11:35 pm

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.-
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: fread Problem

Beitrag von naums » Sa Nov 19, 2011 10:44 am

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
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fread Problem

Beitrag von Xin » Sa Nov 19, 2011 12:30 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten