C Programovanie

Ako sa používa funkcia Memset

Ako sa používa funkcia Memset

V jazyku C sa funkcia memset () používa na nastavenie jednobajtovej hodnoty na byte bloku pamäte po bajtech. Táto funkcia je užitočná na inicializáciu bloku pamäťového bloku po bajte o konkrétnu hodnotu. V tomto článku uvidíme podrobne, ako je možné túto funkciu využiť. Takže poďme na to.

Hlavičkový súbor:

1
struna.h

Syntax:

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

Táto funkcia nastavuje prvý bajtov bloku pamäte, na ktoré ukazuje str od ch.

Argumenty:

Funkcia má 3 argumenty:

  1. str: Toto je ukazovateľ miesta v pamäti, kde bude nastavená pamäť. Toto je ukazovateľ neplatnosti, takže môžeme nastaviť akýkoľvek typ pamäťového bloku, ale pamäť sa nastaví po bajtoch.
  2. ch: Toto je hodnota, ktorá sa má skopírovať do pamäťového bloku. Toto je celočíselná hodnota, ale pred kopírovaním sa prevedie na nepodpísaný znak.
  3. n: Toto je počet bajtov v bloku pamäte, ktorý je nastavený.

Návratové hodnoty:

memset () vráti prvú adresu bloku pamäte, odkiaľ začne nastavovať hodnotu.

Príklady:

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

char str [30] = "ABCD EFGH";
printf ("Pred memset =>% s", str);
memset (str, 'x', 3);
printf ("\ nPo memset =>% s \ n", str);
návrat 0;


V príklade 1.c, deklarovali sme jedno pole znakov veľkosti 30. Potom sme ho inicializovali reťazcom „ABCD EFGH.„Vo funkcii memset sme odovzdali 3 argumenty str, 'x' a 3. Takže pamäťový blok označený str bude resetovaný na prvé 3 znaky o 'x.„Po vytvorení sady pamätí, keď vytlačíme pamäť, dostaneme„ xxxD EFGH.“

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

char str [30] = "ABCD EFGH";
printf ("Pred memset =>% s", str);
memset (str + 4, 'x', 3);
printf ("\ nPo memset =>% s \ n", str);
návrat 0;


V príklade 2.c, odovzdali sme str + 4 funkcii memset. Takže to resetovalo pamäť po 4. umiestnení str.  Po vytvorení sady pamätí, keď tlačíme pamäť, dostaneme „ABCDxxxGH.“

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

int arr [5], i;
memset (arr, 10,5 * sizeof (arr [0]));
printf ("\ narr Prvky => \ n");
pre (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
návrat 0;


V príklade 3.c, deklarovali sme celočíselné pole veľkosti 5 a pokúšame sa ho inicializovať o 10. Ale z výstupu sme videli, že pole nie je inicializované číslom 10; namiesto toho sme dostali hodnotu „168430090“. Je to preto, že celočíselná hodnota je väčšia ako jeden bajt a funkcia memset pred skopírovaním prevedie hodnotu na nepodpísaný znak. Teraz uvidíme, ako dostaneme hodnotu „168430090“.


Binárne zastúpenie 10 je 00000000 00000000 00000000 00001010.

Keď sa celé číslo prevedie na nepodpísaný znak, bude sa brať do úvahy nižší 1 bajt. Keď sa teda 10 prevedie na nepodpísaný znak, je to binárna reprezentácia 00001010.

Funkcia memset () nastavuje umiestnenie pamäte po bajtoch. Celkovo teda budú 4 bajty: 00001010 00001010 00001010 00001010.

Desatinná hodnota binárneho vyjadrenia 4 bajtov je 168430090.

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

int arr [5], i;
memset (arr, 0,5 * sizeof (arr [0]));
printf ("\ narr Prvky => \ n");
pre (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
návrat 0;


V príklade 4.c, celé číslo poľa sme inicializovali o 0. Všetky bity binárnej reprezentácie 0 sú 0. Pole je teda inicializované číslom 0.

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

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


V príklade 5.c, celé číslo poľa sme inicializovali o 0. Všetky bity binárnej reprezentácie -1 sú 1. Pole je teda inicializované hodnotou -1.

Záver:

V tomto článku sme videli pomocou funkcie memset, ako môžeme efektívne inicializovať alebo nastaviť hodnotu pamäťového bloku. Môžeme nastaviť ľubovoľný znak a 0 alebo -1 ako celočíselnú hodnotu do pamäťového bloku. Funkcia Memset rýchlejšie nastaví veľkú časť súvislej pamäte v porovnaní s jednoduchým nastavením polohy pomocou slučky.

Hry Výukový program Shadow of the Tomb Raider pre Linux
Výukový program Shadow of the Tomb Raider pre Linux
Shadow of the Tomb Raider je dvanásty prírastok do série Tomb Raider - franšíza akčných adventúr vytvorená Eidosom Montrealom. Túto hru prijali kritic...
Hry Ako zvýšiť rýchlosť FPS v systéme Linux?
Ako zvýšiť rýchlosť FPS v systéme Linux?
FPS znamená Počet snímok za sekundu. Úlohou FPS je merať snímkovú frekvenciu pri prehrávaní videa alebo herných výkonoch. Jednoducho povedané, počet n...
Hry Najlepšie hry Oculus App Lab
Najlepšie hry Oculus App Lab
Ak ste vlastníkom náhlavnej súpravy Oculus, musíte byť informovaní o bočnom nakladaní. Sideloading je proces inštalácie neuloženého obsahu do náhlavne...