C programozás

Hogyan használják a Memset funkciót

Hogyan használják a Memset funkciót

C-ben a memset () függvény segítségével egy bájtos értéket állíthatunk be egy memória blokk bájtra byte-onként. Ez a funkció hasznos a memória blokk bájt byte általi inicializálásához egy adott érték által. Ebben a cikkben részletesen megnézzük, hogyan használható ez a függvény. Tehát kezdjük.

Fejlécfájl:

1
húr.h

Szintaxis:

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

Ez a függvény állítja be az elsőt byte a memóriablokk által mutatott str által ch.

Érvek:

A függvény 3 argumentumot tartalmaz:

  1. str: Ez a memória helyének mutatója, ahol a memória be lesz állítva. Ez egy érvénytelen mutató, így bármilyen típusú memóriablokkot beállíthatunk, de a memóriát bájtonként bájt állítja be.
  2. ch: Ezt az értéket kell átmásolni a memória blokkba. Ez egy egész érték, de a másolás előtt előjel nélküli karakterré konvertálódik.
  3. n: Ez a bájtok száma a beállított memória blokkban.

Visszatérési értékek:

memset () a memóriablokk első címét adja vissza, ahonnan az értéket kezdi beállítani.

Példák:

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

char str [30] = "ABCD EFGH";
printf ("Memset előtt =>% s", str);
memset (str, 'x', 3);
printf ("\ nA memória után =>% s \ n", str);
visszatér 0;


Az 1. példában.c, egy 30 méretű karaktertömböt deklaráltunk. Ezután inicializáltuk az „ABCD EFGH.”A memset függvényben 3 str,„ x ”és 3 argumentumot adtunk át. Tehát, az str által jelölt memóriablokk az első 3 karaktert 'x-gyel alaphelyzetbe állítja.'A memória után, amikor kinyomtatjuk a memóriát, megkapjuk az „xxxD EFGH-t.”

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

char str [30] = "ABCD EFGH";
printf ("Memset előtt =>% s", str);
memset (str + 4, 'x', 3);
printf ("\ nA memória után =>% s \ n", str);
visszatér 0;


A 2. példában.c, az str + 4-et átadtuk a memset függvénynek. Tehát, visszaállította a memóriát a str 4. helye után.  A memória után, amikor kinyomtatjuk a memóriát, megkapjuk az „ABCDxxxGH.”

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

int arr [5], i;
memset (arr, 10,5 * sizeof (arr [0]));
printf ("\ narr Elements => \ n");
mert (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
visszatér 0;


A 3. példában.c, deklaráltunk egy 5-ös egész tömböt, és megpróbáltuk inicializálni 10-vel. De a kimenetből azt láttuk, hogy a tömböt nem inicializálja 10; ehelyett a „168430090” értéket kaptuk. Ez azért van, mert az egész érték nagyobb, mint egy bájt, és a memset függvény átalakítja az értéket aláíratlan karakterré másolás előtt. Most meglátjuk, hogyan fogjuk megkapni az „168430090” értéket.


A 10 bináris ábrázolása 00000000 00000000 00000000 00001010.

Ha az egész számot előjel nélküli karakterré konvertáljuk, az alsó 1 bájtot vesszük figyelembe. Tehát, ha a 10-et átalakítjuk előjel nélküli karakterré, akkor a bináris reprezentáció 00001010.

A memset () függvény bájtonként állítja be a memória helyét. Tehát összesen 4 bájt lesz: 00001010 00001010 00001010 00001010.

A 4 bájt bináris ábrázolásának tizedesértéke 168430090.

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

int arr [5], i;
memset (arr, 0,5 * sizeof (arr [0]));
printf ("\ narr Elements => \ n");
mert (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
visszatér 0;


A 4. példában.c, az egész tömböt 0-val inicializáltuk. A 0 bináris ábrázolásának minden bitje 0. Tehát a tömböt 0-val inicializáljuk.

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

int arr [5], i;
memset (arr, -1,5 * sizeof (arr [0]));
printf ("\ narr Elements => \ n");
mert (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
visszatér 0;


Az 5. példában.c, az egész tömböt 0-val inicializáltuk. A -1 bináris ábrázolásának minden bitje 1. Tehát a tömböt inicializálja -1.

Következtetés:

Ebben a cikkben a memset függvény segítségével láthattuk, hogyan lehet inicializálni vagy hatékonyan beállítani a memória blokk értékét. Bármelyik karaktert és 0 vagy -1 egész értékként beállíthatunk egy memória blokkra. A Memset funkció gyorsabb, ha nagy darab összefüggő memóriát állít be, összehasonlítva azzal, hogy egyszerűen megadja a helyet egy hurok segítségével.

OpenTTD bemutató
Az OpenTTD az egyik legnépszerűbb üzleti szimulációs játék. Ebben a játékban létre kell hoznia egy csodálatos szállítási vállalkozást. Azonban kezdete...
SuperTuxKart Linuxhoz
A SuperTuxKart egy nagyszerű cím, amelynek célja, hogy ingyenesen hozza el a Mario Kart élményét Linux rendszerén. Elég kihívást jelentő és szórakozta...
Csata a Wesnoth bemutatóért
A Battle for Wesnoth az egyik legnépszerűbb nyílt forráskódú stratégiai játék, amelyet jelenleg játszhatsz. Ez a játék nem csak nagyon hosszú ideje fe...