Adressen aus Datei lesen
Re: Adressen aus Datei lesen
naja es war ja auch nur als beispiel gemeint.
wenn ich eine kurze Datei mit 1234567890 nehme dann lese ich natürlich nicht das 128. zeichen.
Aber selbst beim lesen von zeichen 1 kommt ein föllig anderer wert raus.
wenn ich eine kurze Datei mit 1234567890 nehme dann lese ich natürlich nicht das 128. zeichen.
Aber selbst beim lesen von zeichen 1 kommt ein föllig anderer wert raus.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Adressen aus Datei lesen
Was erwartest du, was kommt heraus, woran könnte es liegen?Aber selbst beim lesen von zeichen 1 kommt ein föllig anderer wert raus.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Adressen aus Datei lesen
Hallo
Ok also nochmal alles rein hier.
Hier mein code und die Text Datei als Anhang. sowie das ergebnis der Console.
Ich werwarte die ersten 4 zeichen meiner Datei 1a.txt
Aber selbst das geht nicht.
ich hoffe jetzt ist nochmal klarer geworden wo mein Problem liegt
Ok also nochmal alles rein hier.
Hier mein code und die Text Datei als Anhang. sowie das ergebnis der Console.
Ich werwarte die ersten 4 zeichen meiner Datei 1a.txt
Aber selbst das geht nicht.
ich hoffe jetzt ist nochmal klarer geworden wo mein Problem liegt
Code: Alles auswählen
#include <stdio.h>
int main()
{
int n=0;
int start=1;
char chr1[5];
FILE *file1;
file1=fopen("1a.txt","r");
fseek(file1, 0, SEEK_END);
printf("Die Datei ist %ld Bytes gross!!\n\n", ftell(file1));
while (n<4)
{
fseek(file1, start, SEEK_SET);
chr1[n]=getc(file1);
n++;
printf("Zeichen %d ist %d\n",n,chr1[n]);
}
return 0;
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Adressen aus Datei lesen
Code: Alles auswählen
while (n<4)
{
fseek(file1, start, SEEK_SET);
chr1[n]=getc(file1); //n
n++; //n+1
printf("Zeichen %d ist %d\n",n,chr1[n]); //chr1[n+1] ist natürlich nicht gesetzt
}
Du inkrementierst zwischen Lesen und Ausgeben, das funktioniert natürlich nicht.
Entweder am Ende oder am Anfang der Schleife inkrementieren.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Adressen aus Datei lesen
Ok da hast du recht. Aber das was raus kommt
Ist ja nicht in der Datei enthalten. Also muss doch noch woanders ein Fehler sein
Ist ja nicht in der Datei enthalten. Also muss doch noch woanders ein Fehler sein
Re: Adressen aus Datei lesen
Einigermaßen erstaunlich, wie Programmieren Menschen offensichtlich immer wieder vom logischen Denken abhältOstrich hat geschrieben:Ok da hast du recht. Aber das was raus kommt
Ist ja nicht in der Datei enthalten. Also muss doch noch woanders ein Fehler sein

Guck' dir nochmal genau an, was Du da eigentlich gemacht hast:
Code: Alles auswählen
start = 1; // weil Dateien und Arrays an Position 0 anfangen, zeigt start auf das 2. Zeichen in der Datei (und zwar immer)!
...
while (n<4) // vier mal hintereinander
{
fseek(file1, start, SEEK_SET); // Dateizeiger auf jenes zweite Zeichen der Datei setzen
chr1[n]=getc(file1); // zweites Zeichen der Datei nach chr1[n] auslesen
n++; // n um eins erhöhen, chr1[n] zeigt dann im Array auf ein bis dahin nicht initialisiertes Element
printf("Zeichen %d ist %d\n",n,chr1[n]); // eben dieses nicht initialisierte Element ausgeben
}
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Adressen aus Datei lesen
Wenn du Variablen nicht initialisierst(vor allem Arrays), daher keinen Wert zuweist, dann kannst du beliebigen Speichermüll lesen. Das ist das was hier passiert.Ist ja nicht in der Datei enthalten. Also muss doch noch woanders ein Fehler sein
Es steht noch irgendwas im RAM, das gibst du aus.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Adressen aus Datei lesen
Also wie gesagt klappt jetzt.
Erweitert habe ich nochmal eine Frage.
Ich will das jetzt mal Binär machen
Hab die Datei mal angehangen
Mein Code so geändert
Ausgabe siehe Bild:
Was mich Stört ist Zeichen 1 = FFFFFFA8
Was machen die FFFFFF da? Ich hab doch ein Char und das ist nur ein Byte groß. dürfte doch gar nicht gehen oder?
Danke
Erweitert habe ich nochmal eine Frage.
Ich will das jetzt mal Binär machen
Hab die Datei mal angehangen
Mein Code so geändert
Code: Alles auswählen
#include <stdio.h>
int main()
{
int n=0;
int start=23;
char chr1[60];
FILE *file1;
file1=fopen("1a.bin","rb");
fseek(file1, 0, SEEK_END);
printf("Die Datei ist %ld Bytes gross!!\n\n", ftell(file1));
while (n<20)
{
fseek(file1, start, SEEK_SET);
chr1[n]=getc(file1);
printf("Zeichen %d ist %X\n",n,chr1[n]);
n++;
start++;
}
return 0;
}
Was mich Stört ist Zeichen 1 = FFFFFFA8
Was machen die FFFFFF da? Ich hab doch ein Char und das ist nur ein Byte groß. dürfte doch gar nicht gehen oder?
Danke
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Adressen aus Datei lesen
Du hast ein char... ein char ist ein 8-Bit-Wert zwischen -128 und 128 und A8 ist ein negativer Wert. %X gibt ein 32-Bit Wert aus. signed char A8 wird auf signed long konvertiert: FFFFFFA8.Ostrich hat geschrieben:Was mich Stört ist Zeichen 1 = FFFFFFA8
Was machen die FFFFFF da? Ich hab doch ein Char und das ist nur ein Byte groß. dürfte doch gar nicht gehen oder?
Danke
Wenn Du die Chars von 0-255 nutzen möchtest, womit A8 als long auch 000000A8 wäre, also eben A8, wenn man die Nullen wie bei den anderen weglässt, dann musst Du chr1 entsprechend als Array von unsigned chars deklarieren:
Code: Alles auswählen
unsigned char chr1[60];
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.