Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : strukturen die mittels low level datei io gespeichert und ausgegeben werden sollen



doomcalyptica
11-02-2005, 16:16
hallo,


#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys\stat.h>
#include <string.h>

#define MAX 20


struct struktur {
char name[100];
char street[100];
int alter;
};

int main() {
struct struktur a[100];
struct struktur b[100];
int i;
int datei;

if((datei=creat("datei.txt",S_IWRITE))==-1) {
printf("fehler\n");
return -1;
}

for(i=0; i<MAX; i++) {
///////////////////////////////...................////////////////
a[i].alter=i;
////////////////////////////////.........................////////////
strcpy(a[i].name,"leer");
strcpy(a[i].street,"leer");
if((write(datei,&a[i].alter,sizeof(a[i].alter)))==-1)
return -1;
if((write(datei,&a[i].name,sizeof(a[i].name)))==-1)
return -1;
if((write(datei,&a[i].street,sizeof(a[i].street)))==-1)
return -1;
}

close(datei);
if((datei=open("datei.txt",O_RDONLY))==-1) {
printf("fehler\n");
return -1;
}

for(i=0; i<MAX; i++) {
if((read(datei,&b[i].alter,sizeof(b[i].alter)))==-1)
return -1;
if((read(datei,&b[i].name,sizeof(b[i].name)))==-1)
return -1;
if((read(datei,&b[i].street,sizeof(b[i].street)))==-1)
return -1;
}

for(i=0; i<MAX; i++) {
printf("%d\t%s\t%s\n",b[i].alter,b[i].name,b[i].street);
}

close(datei);
return 0;
}

die ausgabe von diesem programm sieht so aus:


0 leer leer
1 leer leer
2 leer leer
3 leer leer
4 leer leer
5 leer leer
6 leer leer
7 leer leer
8 leer leer
9 leer leer
10 leer
3071 leer
3327 leer
3583 leer
3839 leer
4095 leer
4351 leer
4607 leer
4863 leer
5119 leer

"C:\lcc\lcc\test.exe"
Return code 0
Execution time 0.011 seconds
Press any key to continue...

veränder ich die zeile 30 so um:


a[i].alter=0;

im ganzen siehts dann so aus (mit "///....///" markiert)


#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys\stat.h>
#include <string.h>

#define MAX 20


struct struktur {
char name[100];
char street[100];
int alter;
};

int main() {
struct struktur a[100];
struct struktur b[100];
int i;
int datei;

if((datei=creat("datei.txt",S_IWRITE))==-1) {
printf("fehler\n");
return -1;
}

for(i=0; i<MAX; i++) {
///////////////////////////////..................//////////////////////
a[i].alter=0;
/////////////////////////....................//////////////////////////
strcpy(a[i].name,"leer");
strcpy(a[i].street,"leer");
if((write(datei,&a[i].alter,sizeof(a[i].alter)))==-1)
return -1;
if((write(datei,&a[i].name,sizeof(a[i].name)))==-1)
return -1;
if((write(datei,&a[i].street,sizeof(a[i].street)))==-1)
return -1;
}

close(datei);
if((datei=open("datei.txt",O_RDONLY))==-1) {
printf("fehler\n");
return -1;
}

for(i=0; i<MAX; i++) {
if((read(datei,&b[i].alter,sizeof(b[i].alter)))==-1)
return -1;
if((read(datei,&b[i].name,sizeof(b[i].name)))==-1)
return -1;
if((read(datei,&b[i].street,sizeof(b[i].street)))==-1)
return -1;
}

for(i=0; i<MAX; i++) {
printf("%d\t%s\t%s\n",b[i].alter,b[i].name,b[i].street);
}

close(datei);
return 0;
}


man erhält diese ausgabe;


0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer
0 leer leer

"C:\lcc\lcc\test.exe"
Return code 0
Execution time 0.011 seconds
Press any key to continue...
so und diese ausgabe ist mir schleierhaft, wieso fürht die 0 zu keinen problem, aber die 20 ? -> (i kann nicht größer als 20 sein ! )
was mach ich da falsch, vorallem verstehe ich nicht wieso da auf einmal solche otopischenwerte die 3071, 3327 usw rauskomen können ... was mach ich da falsch ?
ist das ewine art sonderfall ... bug ??
please help

quinte17
13-02-2005, 16:44
hast du dir denn schoneinmal den inhalt deiner geschriebenen datei angeschaut, ob der auch so aussieht wie erwartet?
also der art
4byteInt100ByteChar100ByteChar

überprüfe erstmal die eine seite deines progs.. (das schreiben)
und erst wenn du sicher bist, dann wende dich dem lesen zu...

dann ist es vielleicht einfacher einen fehler zu sehen...

greetz