c malloc wskazniki stringi

0

Witam, napisałem poniższy program w którym używam m.in dynamicznych tablic i wskaźników do pobierania danych od użytkowników problem polega na tym, że wszystko działa poprawnie gdy pobieram dane od max 2 użytkowników. Gdy pobieram dane dla 3 to np. program gubi gdzieś nazwisko 3 osoby. Nie mogę dostrzec błędów w moim kodzie dlatego proszę o wytknięcie ich:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define dl1 30
#define dlugosc_plci 10
int main ()
{
int i, liczba;
char **imie;
char **nazwisko;
char **gender;
int *rok;
int *wiek;
char *plec;

char w[3][10]={"kobieta"};
char m[3][10]={"mezczyzna"};

printf ("Podaj liczbe: ");
scanf ("%d", &liczba);
printf ("%d\n", liczba);

imie= (char **)malloc(liczba * sizeof(char *));
nazwisko= (char**)malloc(liczba * sizeof(char *));
gender= (char**)malloc(liczba* sizeof(char *));

for (i=0; i<liczba; ++i)
{
    imie[i] = (char *)malloc(dl1 * sizeof(char));
    nazwisko[i] = (char *)malloc(dl1 * sizeof(char));
    gender[i] = (char *)malloc(dlugosc_plci * sizeof(char));
   
   
}
  rok = (int *)malloc(liczba * sizeof(int));
  wiek = (int *)malloc(liczba * sizeof(int));
  plec = (char *)malloc(liczba * sizeof(char));
char *wimie=imie[0];
char *wnazwisko=nazwisko[0];
  char *wgender=gender[0];
  int *wrok=&rok[0];
  char *wplec=&plec[0];
  int *wwiek=&wiek[0];


for (i=0; i<liczba; ++i)
{
    printf ("Podaj imie: ");
    scanf ("%s", wimie+dl1*i);
    printf ("\n%s\n", wimie+dl1*i);
    printf ("Podaj nazwisko: ");
    scanf ("%s", wnazwisko+dl1*i);
    printf ("\n%s\n", wnazwisko+dl1*i);
    printf ("Podaj rok urodzenia:\n ");
    scanf ("%d", (wrok+1*i));
    *(wwiek+1*i)=2012-*(wrok+1*i);
    printf ("Podaj plec: k - kobieta m - mezczyzna");
    
    scanf ("%s", wplec+1*i);
    if ((*(wplec+1*i) == 'k' || *(wplec+1*i) == 'K'))
    {
		strcpy (wgender+dlugosc_plci*i, w[0]);
		printf ("\n  %c %s\n", plec[i], wgender+dlugosc_plci*i);
		}
		if ((*(wplec+1*i) == 'm' || *(wplec+1*i) == 'M'))
		{
			strcpy (wgender+dlugosc_plci*i, m[0]);
			printf ("\n %c %s\n", plec[i], wgender+dlugosc_plci*i);
			}

    
    
}
wimie=imie[0];                                             

wnazwisko=nazwisko[0];
wgender= gender[0];
wwiek= &wiek[0];

  for (i=0; i<liczba; ++i)
  {
		printf ("\n%s\n", (wnazwisko+dl1*i));
		}

printf ("Podsumowanie: \n");
for (i=0; i<liczba; ++i)
{
    printf ("\n%s\ %s %d lat %d rok %s ", wimie+dl1*i, wnazwisko+dl1*i, *(wwiek+1*i), *(wrok+1*i), wgender+dlugosc_plci*i);
}
system ("pause");
return 0;

}

0

Koszmar. Lekcja na dziś: po tablicach dynamicznych mozesz przesuwać się za pomocą [] tak samo jak po statycznych.

0

Wiem o tym, ale w poleceniu miałem zawarte aby przesuwać się za pomocą wskaźników, a nie w sposób statyczny.

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