Jak używana jest funkcja memset

Jak używana jest funkcja memset

W C funkcja memset () służy do ustawiania wartości jednostronnej na bajt bloku pamięci przez bajt. Ta funkcja jest przydatna do inicjalizacji bajtu bloku pamięci przez bajt przez określoną wartość. W tym artykule zobaczymy szczegółowo, w jaki sposób można użyć tej funkcji. Więc zacznijmy.

Plik nagłówka:

strunowy.H

Składnia:

void *memset (void *str, int ch, size_t n)

Ta funkcja ustawia pierwszy N bajty bloku pamięci wskazane przez str przez Ch.

Argumenty:

Funkcja przyjmuje 3 argumenty:

  1. str: To jest wskaźnik lokalizacji pamięci, w której zostanie ustawiona pamięć. Jest to wskaźnik pustki, więc możemy ustawić dowolny typ bloku pamięci, ale pamięć zostanie ustawiona bajt przez bajt.
  2. Ch: Jest to wartość, którą należy skopiować do bloku pamięci. Jest to wartość liczb całkowita, ale jest ona przekonwertowana na postać niepodpisaną przed skopiowanym.
  3. N: To jest liczba bajtów w bloku pamięci, który jest ustawiony.

Zwracaj wartości:

memset () Zwraca pierwszy adres bloku pamięci, z którego zaczyna ustawiać wartość.

Przykłady:

//Przykład 1.C
#włączać
#włączać
int main ()

char str [30] = "abcd efgh";
printf („przed memset => %s”, str);
memset (str, „x”, 3);
printf ("\ nafter memset => %s \ n", str);
powrót 0;


W przykładzie1.c, zadeklarowaliśmy jedną tablicę znaków o rozmiarze 30. Następnie zainicjowaliśmy go z ciągiem „ABCD EFGH.„W funkcji memset przeszliśmy 3 argumenty str,„ x ”i 3. Tak więc blok pamięci wskazany przez STR zostanie zresetowany pierwszych 3 znaków przez 'x.„Po memset, kiedy drukujemy pamięć, otrzymamy„ xxxd efgh."

// Przykład2.C
#włączać
#włączać
int main ()

char str [30] = "abcd efgh";
printf („przed memset => %s”, str);
memset (STR+4, „x”, 3);
printf ("\ nafter memset => %s \ n", str);
powrót 0;


W przykładzie2.C, przeszliśmy STR+4 do funkcji memset. Tak więc zresetuje pamięć po 4. miejscu Str. Po memset, kiedy drukujemy pamięć, otrzymamy „Abcdxxxgh."

// Przykład3.C
#włączać
#włączać
int main ()

int arr [5], i;
memset (ARR, 10,5*sizeof (ARR [0]));
printf ("\ cr elements => \ n");
dla (i = 0; i<5;i++)
printf („%d \ t”, arr [i]);
printf („\ n”);
powrót 0;


W przykładzie3.C, zadeklarowaliśmy zestaw liczb całkowitych rozmiaru 5 i próbując ją zainicjować o 10. Ale z wyjścia widzieliśmy, że tablica nie jest inicjowana przez 10; Zamiast tego mamy wartość „168430090”. Wynika to z faktu, że wartość liczb całkowita jest większa niż jeden bajt, a funkcja memset przekształca wartość na znak niepodpisany. Teraz zobaczymy, jak otrzymamy wartość „168430090”.


Binarna reprezentacja 10 to 00000000 00000000 00000000 00001010.

Gdy liczba całkowita przekonwertowana na niepodpisaną char, rozważany jest niższy 1 bajt. Tak więc, gdy 10 zostanie przekonwertowane na niepodpisaną char, jest to reprezentacja binarna 00001010.

Funkcja memset () ustawia bajt lokalizacji pamięci według bajtu. Tak więc w sumie 4 bajty to: 00001010 00001010 00001010 00001010.

Wartość dziesiętna binarnej reprezentacji 4 bajtów wynosi 168430090.

// Przykład4.C
#włączać
#włączać
int main ()

int arr [5], i;
memset (ARR, 0,5*sizeof (arr [0]));
printf ("\ cr elements => \ n");
dla (i = 0; i<5;i++)
printf („%d \ t”, arr [i]);
printf („\ n”);
powrót 0;


W przykładzie4.c, zainicjowaliśmy tablicę liczb całkowitych o 0. Wszystkie fragmenty binarnej reprezentacji 0 to 0. Więc tablica jest inicjowana przez 0.

// Przykład5.C
#włączać
#włączać
int main ()

int arr [5], i;
memset (ARR, -1,5*sizeof (arr [0]));
printf ("\ cr elements => \ n");
dla (i = 0; i<5;i++)
printf („%d \ t”, arr [i]);
printf („\ n”);
powrót 0;


W przykładzie 5.c, zainicjowaliśmy tablicę liczb całkowitych o 0. Wszystkie fragmenty binarnej reprezentacji -1 wynoszą 1. Więc tablica jest inicjowana przez -1.

Wniosek:

W tym artykule widzieliśmy za pomocą funkcji memset, w jaki sposób możemy skutecznie zainicjować lub ustawić wartość bloku pamięci. Możemy ustawić dowolny znak i 0 lub -1 jako wartość liczb całkowitą na blok pamięci. Funkcja memset jest szybsza, aby ustawić duży kawałek ciągłej pamięci w porównaniu z po prostu ustawieniem lokalizacji za pomocą pętli.