Dynamiczne zarzadzanie pamięcią, tablice strultur

0

Witam, mam do napisania program, który "pozwoli zapamiętać w postaci tablicy struktur dane o 10 użytkownikach w postaci imię, nazwisko, data urodzenia. Dane powinny być przechowywane w tablicy stu elementowej przechowującej wyłącznie adresy do danych, a dane będą alokowane w sposób dynamiczny w miarę potrzeb użytkownika."
na razie napisałem coś takiego, proszę o skorygowanie błędów i ewentualne wskazówki co należałoby jeszcze dodać:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    struct czlowiek
    {
        char imie[20];
        char nazwisko[20];
        char data[20];
    };

    int i;

    struct czlowiek *dane[100];
    dane=(struct czlowiek *)malloc(sizeof(struct czlowiek)*100);

    for (i=0; i<3; i++)
    {
        printf("Wprowadz imie %d uzytkownika: \n", i+1);
        scanf("%s", &dane[i].imie);
        printf("Teraz wprowadz nazwisko: \n");
        scanf("%s", &dane[i].nazwisko);
        printf("Wprowadz date urodzenia: \n");
        scanf("%s", &dane[i].data);
    }

    for(i=0; i<3; i++)
    {
        printf("Uzytkownik nr. %d:\n Imie: %s\n Nazwisko: %s\n Data urodzenia: %s\n\n",
        i+1, dane[i].imie, dane[i].nazwisko, dane[i].data);
    }

system("PAUSE");

return EXIT_SUCCESS;
}

Z góry dziękuje za pomoc.

1
  1. Przypisujesz typowi (*struct czlowiek)[100] typ struct czlowiek*
  2. Dlaczego tablica ma miec 100 elementow, skoro chcesz wczytac 10 osob?
  3. Dlaczego chcac wczytac 10 osob, petla for iteruje do 3?
  4. dane[i].imie, to juz jest wskaznik, nie potrzeba pobierac jego adresu (prawdopodobnie av), to samo z nazwiskiem i data.
  5. Skoro jestes newbie, dlaczego nie dbasz w zadnym stopniu o zwalnianie pamieci z heapa?
  6. [Polecam uzywac przedrostkowych wersji operator in/de-krementecji, kiedy to mozliwe]
  7. [Podzielilbym kod na funkcje, np. funkcja wczytujaca to tablicy usera (in - deskryptor, tablica obiektow) i funkcja wyswietlajaca (in - tablica obiektow)]
0

@n0name_l, w punkcie pierwszym nie zasugerował poprawnego rozwiązania, więc ma być tak:

    struct czlowiek dane[10];

lub: struct czlowiek *dane=(struct czlowiek *)malloc(sizeof(struct czlowiek)*10);

oba rozwiązania na raz to kiepski pomysł.
0

Dzieki wielkie, wszystko śmiga :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1