Ahoj,
nedaří se mi rozumně vypsat data načtená z binárního souboru. Mám binární soubor, který obsahuje informace o dané osobě - jméno, příjmení, titul před jménem, titul za jménem, telefon a mail. První řádek výpisu mi funguje bez problému (osoba má všechny informace vyplněné), další už se nezobrazí korektně a myslím si, že to bude tím, že některé informace vyplněné nemá (nemá titul před jménem).
Zdrojové kódy:
osoba.c:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "osoba.h"
tOsoba *alokujOsobu()
{
tOsoba *novaOs = NULL;
novaOs = (tOsoba*) malloc(sizeof(tOsoba));
return novaOs;
}
void vypisOsobu(tOsoba* os)
{
printf("Vypis osoby:\n");
printf("%s %s %s %s\n", os->titulPred, os->jmeno, os->prijmeni, os->titulZa);
printf("Telefon: %s\n", os->telefon);
printf("Mail: %s\n\n", os->mail);
}
seznam.c:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "seznam.h"
#include "osoba.h"
tOsoba **poleUkOsob = NULL;
int velikostPole = 0;
void nacti(char *nazevSouboru)
{
FILE *soubor = NULL;
int i;
tOsoba *novaOs = NULL;
soubor = fopen(nazevSouboru, "rb");
fseek(soubor, 0, SEEK_END);
velikostPole = ftell(soubor) / sizeof(tOsoba);
fseek(soubor, 0, SEEK_SET);
poleUkOsob = (tOsoba**) calloc(velikostPole, sizeof(tOsoba*));
for(i = 0; i < velikostPole; i++)
{
novaOs = alokujOsobu();
fread(novaOs, sizeof(tOsoba), 1, soubor);
poleUkOsob[i] = novaOs;
}
fclose(soubor);
}
void vypis(char *retezec)
{
int i;
if(retezec == NULL)
{
for(i = 0; i < velikostPole; i++)
{
printf("Osoba %d:\n", i + 1);
vypisOsobu(poleUkOsob[i]);
}
}
else
{
for(i = 0; i < velikostPole; i++)
{
if(strstr(poleUkOsob[i]->prijmeni, retezec) != NULL)
{
vypisOsobu(poleUkOsob[i]);
break;
}
}
printf("Shoda se zadanym retezcem nenalezena!\n");
}
}
main.c:
#include <stdlib.h>
#include <stdio.h>
#include "osoba.h"
#include "seznam.h"
int main()
{
char *nazevSouboru = NULL, prijmeni[20];
nazevSouboru = "osoby.bin";
if(nazevSouboru == NULL)
{
printf("Soubor nenalezen!\n");
return 0;
}
nacti(nazevSouboru);
printf("Vypis vsech osob:\n\n");
vypis(NULL);
printf("Zadejte prijmeni, ktere chcete hledat: ");
scanf("%s", prijmeni);
vypis(prijmeni);
system("pause");
return 0;
}
Díky moc za rady, já už nevím, čím by to mohlo být. Podle mě se nesprávně posouvám v tom binární kódu (po jiných blocích paměti než potřebuju)...
EDIT: Přidávám screen problému pro představu...