Jak używać funkcji Malloc do tworzenia tablicy struktur

Jak używać funkcji Malloc do tworzenia tablicy struktur

Struktura jest typem danych podobnym do tablicy zastosowanej w programowaniu C, ale jedyną różnicą jest to, że tablica zawiera wartości tego samego typu danych, podczas gdy struktura zawiera wartości na podstawie typów danych zdefiniowanych przez użytkownika. Tablice zajmowały niektóre przestrzenie na pamięci systemu, które mogą być dynamiczne lub statyczne. Funkcja Malloc () jest używana do deklaracji pamięci dynamicznej.

Tablicę struktury można zadeklarować za pomocą pamięci statycznej lub pamięci dynamicznej, w tym zapisie omówimy tablicę struktur za pomocą funkcji Malloc ().

Jak utworzyć tablicę struktur z funkcją Malloc w C

Struktury w programowaniu C są stosowane podobnie do klas. Czas wykonywania struktur jest stosunkowo szybszy niż klasy. Aby zrozumieć strukturę, rozważ przykład:

1
2
3
4
5
6
7
STRUCK PRACOWNIK
int emp_id;
Char emp_name;
;

Mamy strukturę „pracownicy„Który ma dwóch kolejnych członków; emp_int i emp_char. Możemy utworzyć tablicę za pomocą pracowników struktury jako:

1
Pracownicy struktury Pracownicy [4];

Oświadczyliśmy tablicę „Pracownicy”Używanie struktury„pracownicy”I ma 4 lokalizacje do przechowywania wartości. Jeśli chcemy uzyskać dostęp do drugich elementów tablicy struktur, z których skorzystamy, pracownicy [1] i podobnie jeśli chcemy uzyskać dostęp do członków elementów, których będziemy korzystać, pracownicy [1].emp_id.

Ale tutaj możemy również użyć funkcji Malloc () do użycia dynamicznej alokacji pamięci. Zaletą pamięci dynamicznej jest to, że wykorzystuje przestrzeń podczas wykonywania programu zgodnie z wymogiem. W tym celu używamy funkcji Malloc (), która wysyła żądanie do przypisania bloku pamięci do segmentu sterty pamięci, która przechowuje dane losowo. Jeśli pamięć sterta nie może zabawić żądania Malloc () ze względu.

Teraz, jeśli chcemy użyć funkcji Malloc () do deklaracji tablicy struktury, program będzie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#włączać
#włączać
int main (int argc, char ** argv)

STRUKTYNEK TYPEDEF

char* emp_name;
int emp_id;
Pracownicy;
int num = 2, i;
Pracownicy * Pracownicy
dla (i = 0; i < num; i++)

pracownicy [i].emp_name = (char*) malloc (sizeof (char*));
printf („Wprowadź nazwę pracownika:”);
Scanf („%s”, pracownicy [i].Emp_name);
printf („Wprowadź identyfikator pracownika:”);
Scanf („%D” i pracownicy.emp_id);

printf („Wprowadź wszystkie nazwy maksymalnie 8 znaków \ ​​n”);
dla (i = 0; i < num; i++)
printf („Nazwa pracownika: %S, pracownicy identyfikator: %d \ n”, pracownicy [i].EMP_NAME, PRACOWNIKADATA [i].emp_id);
darmowe (pracowników);
return (0);

Otworzymy plik tekstowy MyFile1 z pomocą Nano Editor i wklejemy powyższy skrypt:

1
$ nano myfile1.C

Użyj kompilatora GCC, aby skompilować powyższy plik:

1
$ gcc myfile1.C -O myfile1

Po pomyślnym skompilowaniu pliku uruchom program za pomocą polecenia:

1
$ ./Myfile1

Wyjaśnienie powyższego kodu to:

  • Najpierw dodaliśmy biblioteki stdlib.H (używane do funkcji dynamicznej alokacji pamięci) i stdio.H (używane przez inne podstawowe funkcje programowania C)
  • Następnie w funkcji głównej przeszliśmy argc (liczba argumentów) i argv (wektor argumentu) używane dla liczb, które są wprowadzane przez użytkowników i wskazują odpowiednio na wskaźniki postaci
  • Po tym ogłosiliśmy strukturę „Pracownicy”Posiadanie dwóch wartości emp_id i emp_name
  • Zainicjował dwie zmienne num i i; NUM przypisał wartość 2, aby mogła wziąć dwa dane wejściowe dla struktury „pracowników”
  • Następnie użyłem funkcji Malloc, aby przypisać pamięć zgodnie z wartością NUM do tablicy wskaźników (pracowników)
  • Wziął dane wejściowe od użytkownika i wyświetl wartości za pomocą pętli dla

Notatka: Musimy użyć „STRUKTYNEK TYPEDEF„Deklarując strukturę, używając tego, nie musimy używać słowa kluczowego”struct„Wielokrotnie.

Kolejną rzeczą należy zauważyć, że może to spowodować przepełnienie bufora, ponieważ użyliśmy „char *”Wewnątrz argumentu Malloc o deklarowaniu wielkości nazwa_mp_ zmienny. Powoduje to ograniczenie nazwy EMP_Nam. Ten przepełnienie bufora nie występuje przez cały czas (większość czasu jest automatycznie zarządzana przez kompilator w czasie wykonywania), dlatego zachęciliśmy użytkownika do wprowadzenia 8 znaków maksymalnych dla nazwy pracownika, aby być po bezpiecznej stronie.

Jeśli nie chcesz ustawiać limitu liczby znaków dla nazwy pracownika, możesz po prostu przejąć dane wejściowe dla nazwy pracownika w pętli dla nowej zmiennej, a następnie przekazać ten rozmiar zmiennej w funkcji Malloc.

Wniosek

Typ danych struktury w programowaniu C zapewnia lepszą wydajność, gdy musimy radzić sobie z małymi grupami o tych samych wartościach. W tym zapisie omówiliśmy tworzenie struktur z tablicami przy użyciu funkcji dynamicznej pamięci, jaką jest funkcja Malloc (). Funkcja Malloc () używa tylko tyle bloku pamięci, która jest wymagana.