Hi,
ich versuche in c bytes (char) aus einer datei zu lesen. Das mache ich wie folgt:
FILE *in;
chat t;
int d=0;
in=fopen(„data.dat“,„r“);
for(f=0;f
Hi,
ich versuche in c bytes (char) aus einer datei zu lesen. Das mache ich wie folgt:
FILE *in;
chat t;
int d=0;
in=fopen(„data.dat“,„r“);
for(f=0;f
Hi
Ich hab das mal neu formatiert.
FILE \*in;
char t;
int d=0;
in=fopen("data.dat","r");
for(f=0;f
Dein erstes Problem ist: Du liest einfach 100 Datensätze ein. Das ist nicht gut. Was passiert denn, wenn du nur 99 drin hast? Dann krachts^^.
Die Daten solltest Du so einlesen:
while( ! feof(in) )
{
fscanf(in,"%c",&t);
// Tu was damit
}
Das zweite problem ist, dass du die Daten im Nirvana speicherst. Du spricht 'd' wie ein Array an, reservierst aber nur Speicher für einen Char.
Hier ist mal eine fehlerfreiere Version.
#define MAXDATA = 100;
FILE \*in;
int counter = 0;
int d[MAXDATA];
in=fopen("data.dat","r");
while(!feof(in))
{
fscanf(in,"%c",&d[counter++]);
if (counter == MAXDATA)
{
// in der Datei sind mehr Datensätze,
// als gespeichert werden können.
// Daher muss das Einlesen abgebrochen werden.
break;
}
}
Statt die Schleife bei erreichen von MAXDATA abzubrechen könntest du ja auch vorher ermitteln, wie viel speicher du brauchst und dann dynamisch allokieren.
Grüße
hmpf, eine Editierfunktion wäre mal nett.
es muss natürlich
char d[MAXDATA];
statt
int d[MAXDATA];
heißen.
Hi,
informiere Dich bitte über die read-Funktion, die ist für das blockweise Auslesen unstrukturierter Bytes vorgesehen. Dann brauchst Du auch keine Schleife.
Gruß Lutz
Ich kann mir nicht vorstellen, dass Dein Compiler das Programm erfolgreich erstellt.
Du deklarierst d als Integer:
int d=0;
… und benutzt es dann als Array:
d[f]=t;
Zur Erklärung:
„int d“ reserviert Speicherplatz für genau eine Integer-Variable (das ist bei gängigen Compilern für den PC ein 32 Bit-Wert).
„d[f]“ dagegen versucht auf das Element „f“ eines Arrays zuzugreifen. Dafür hast Du aber keinen Speicher reserviert – Du wirst irgendeienen zufälligen Wert im Speicher treffen, der für etwas ganz anderes reserviert ist.
Aber wie schon gesagt, sollte eigentlich der Compiler meckern. Er macht Typprüfungen und sollte an der Stelle „d[f]=t“ sagen, dass d überhaupt kein Array ist.