Kod programu:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DLUGOSC 21
#define ROZMIAR 4
#define ILOSC_OCEN 3
struct daneos
{
char imie[DLUGOSC];
char nazwisko[DLUGOSC];
};
struct student
{
struct daneos dane;
float oceny[ILOSC_OCEN];
float srednia;
};
typedef struct student (* mystruct)[ROZMIAR];
void podaj_oceny(mystruct ws);
int main (void)
{
int licznik, licznik2;
struct student studenci[ROZMIAR];
strcpy(studenci[0].dane.imie, "aaa");
strcpy(studenci[0].dane.nazwisko, "bbb");
strcpy(studenci[1].dane.imie, "ccc");
strcpy(studenci[1].dane.nazwisko, "ddd");
strcpy(studenci[2].dane.imie, "eee");
strcpy(studenci[2].dane.nazwisko, "fff");
strcpy(studenci[3].dane.imie, "hhh");
strcpy(studenci[3].dane.nazwisko, "kkk");
mystruct wsk;
wsk = &studenci;
podaj_oceny(wsk);
for(licznik = 0; licznik < ROZMIAR; licznik++)
for(licznik2 = 0; licznik2 < ILOSC_OCEN; licznik2++)
{
printf("%f ", studenci[licznik].oceny[licznik2]);
printf("\n");
}
return 0;
}
void podaj_oceny(mystruct ws)
{
int licznik, licznik2;
for(licznik = 0; licznik < ROZMIAR; licznik++)
for(licznik2 = 0; licznik2 < ILOSC_OCEN; licznik2++)
{
scanf("%f", &ws[licznik]->oceny[licznik2]);
printf("%f ", ws[licznik]->oceny[licznik2]);
}
}
Niezależnie od stałej ILOSC_OCEN przy próbie zapisu do trzeciego elementu (gdy w funkcji podaj_oceny zmienna licznik jest równa 2) wywala błąd. Po małej zmianie program działa poprawnie, jednak chcę się dowiedzieć, dlaczego wywala ten błąd. Nic mi nie przychodzi do głowy.