C Programiranje

Kako se koristi memset funkcija

Kako se koristi memset funkcija

U C, funkcija memset () koristi se za postavljanje jednobajtne vrijednosti na bajt po bajt memorijskog bloka. Ova je funkcija korisna za inicijalizaciju bajta po bajt memorije određenom vrijednošću. U ovom ćemo članku detaljno vidjeti kako se ova funkcija može koristiti. Pa, krenimo.

Datoteka zaglavlja:

1
niz.h

Sintaksa:

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

Ova funkcija postavlja prvo bajtova memorijskog bloka na koji ukazuje str po CH.

Argumenti:

Funkcija uzima 3 argumenta:

  1. str: Ovo je pokazivač mjesta memorije na kojem će se memorija postaviti. Ovo je void pokazivač, tako da možemo postaviti bilo koji tip memorijskog bloka, ali memorija će se postavljati bajt po bajt.
  2. CH: Ovo je vrijednost koju treba kopirati u memorijski blok. Ovo je cjelobrojna vrijednost, ali se prije kopiranja pretvara u nepotpisani znak.
  3. n: Ovo je broj bajtova u memorijskom bloku koji je postavljen.

Povratne vrijednosti:

memset () vraća prvu adresu memorijskog bloka odakle počinje postavljati vrijednost.

Primjeri:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Primjer1.c
#include
#include
int main ()

char str [30] = "ABCD EFGH";
printf ("Prije memseta =>% s", str);
memset (str, 'x', 3);
printf ("\ nNakon memset =>% s \ n", str);
return 0;


U Primjeru1.c, proglasili smo jedan niz znakova veličine 30. Tada smo ga inicijalizirali nizom „ABCD EFGH.”U memset funkciji proslijedili smo 3 argumenta str, 'x' i 3. Dakle, memorijski blok na koji pokazuje str resetirat će prva 3 znaka za 'x.'Nakon memseta, kada ispisujemo memoriju, dobit ćemo "xxxD EFGH."

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Primjer2.c
#include
#include
int main ()

char str [30] = "ABCD EFGH";
printf ("Prije memseta =>% s", str);
memset (str + 4, 'x', 3);
printf ("\ nNakon memset =>% s \ n", str);
return 0;


U Primjeru2.c, proslijedili smo str + 4 funkciji memset. Dakle, resetirao je memoriju nakon 4. mjesta str.  Nakon memseta, kada ispisujemo memoriju, dobit ćemo “ABCDxxxGH."

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Primjer3.c
#include
#include
int main ()

int arr [5], i;
memset (arr, 10,5 * veličina (arr [0]));
printf ("\ narr Elementi => \ n");
za (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
return 0;


U Primjeru3.c, proglasili smo cjelobrojni niz veličine 5 i pokušali ga inicijalizirati za 10. Ali iz izlaza smo vidjeli da niz nije inicijaliziran s 10; umjesto toga, dobili smo vrijednost "168430090". To je zato što je cijela vrijednost veća od jednog bajta i funkcija memset pretvara vrijednost u nepotpisani znak prije kopiranja. Sad ćemo vidjeti kako ćemo dobiti vrijednost “168430090”.


Binarni prikaz 10 je 00000000 00000000 00000000 00001010.

Kada se cijeli broj pretvori u nepotpisani char, uzima se u obzir donji 1 bajt. Dakle, kada se 10 pretvori u nepotpisani char, to je binarni prikaz 00001010.

funkcija memset () postavlja bajt po bajt memorijskog mjesta. Dakle, ukupno 4 bajta bit će: 00001010 00001010 00001010 00001010.

Decimalna vrijednost binarnog prikaza od 4 bajta je 168430090.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Primjer4.c
#include
#include
int main ()

int arr [5], i;
memset (arr, 0,5 * sizeof (arr [0]));
printf ("\ narr Elementi => \ n");
za (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
return 0;


U primjeru4.c, inicijalizirali smo čitav niz s 0. Svi bitovi binarnog prikaza 0 su 0. Dakle, niz je inicijaliziran s 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Primjer5.c
#include
#include
int main ()

int arr [5], i;
memset (arr, -1,5 * sizeof (arr [0]));
printf ("\ narr Elementi => \ n");
za (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
return 0;


U primjeru5.c, inicijalizirali smo čitav niz s 0. Svi bitovi binarnog prikaza -1 su 1. Dakle, niz je inicijaliziran sa -1.

Zaključak:

U ovom smo članku vidjeli pomoću funkcije memset kako možemo učinkovito inicijalizirati ili postaviti vrijednost memorijskog bloka. U memorijski blok možemo postaviti bilo koji znak i 0 ili -1 kao cjelobrojnu vrijednost. Memset funkcija je brža za postavljanje velikog dijela neprekidne memorije u usporedbi s jednostavnim postavljanjem lokacije pomoću petlje.

Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...
Najbolje igre za ručno praćenje
Oculus Quest nedavno je predstavio sjajnu ideju ručnog praćenja bez kontrolera. Sa sve većim brojem igara i aktivnosti koje izvršavaju podršku bilo fo...
Kako prikazati OSD prekrivač u aplikacijama i igrama na cijelom zaslonu za Linux
Igranje igara preko cijelog zaslona ili upotreba aplikacija u režimu preko cijelog zaslona bez ometanja može vas odsjeći od relevantnih informacija o ...