V jazyce C se funkce memset () používá k nastavení jednobajtové hodnoty na byte bloku paměti po bajtech. Tato funkce je užitečná pro inicializaci bajtového bloku paměti po bajtu o určitou hodnotu. V tomto článku uvidíme podrobně, jak lze tuto funkci použít. Pojďme tedy začít.
Soubor záhlaví:
1 | tětiva.h |
Syntax:
1 | void * memset (void * str, int ch, size_t n) |
Tato funkce nastavuje první n bajtů bloku paměti, na který ukazuje str podle ch.
Argumenty:
Funkce má 3 argumenty:
- str: Toto je ukazatel místa v paměti, kde bude nastavena paměť. Toto je ukazatel neplatnosti, takže můžeme nastavit jakýkoli typ bloku paměti, ale paměť bude nastavena bajt po bajtu.
- ch: Toto je hodnota, která se má zkopírovat do bloku paměti. Toto je celočíselná hodnota, ale před kopírováním se převede na nepodepsaný znak.
- n: Toto je počet bajtů v bloku paměti, který je nastaven.
Návratové hodnoty:
memset () vrací první adresu bloku paměti, odkud začíná nastavovat hodnotu.
Příklady:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Příklad 1.C #zahrnout #zahrnout int main () char str [30] = "ABCD EFGH"; printf ("Before memset =>% s", str); memset (str, 'x', 3); printf ("\ nPo memset =>% s \ n", str); návrat 0; |
V příkladu 1.c, deklarovali jsme jedno pole znaků o velikosti 30. Poté jsme jej inicializovali řetězcem „ABCD EFGH.„Ve funkci memset jsme předali 3 argumenty str, 'x' a 3. Takže blok paměti směřovaný str bude resetován na první 3 znaky o 'x.„Po memsetu, když vytiskneme paměť, dostaneme„ xxxD EFGH.“
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Příklad 2.C #zahrnout #zahrnout int main () char str [30] = "ABCD EFGH"; printf ("Before memset =>% s", str); memset (str + 4, 'x', 3); printf ("\ nPo memset =>% s \ n", str); návrat 0; |
V příkladu 2.c, předali jsme str + 4 funkci memset. Resetuje tedy paměť po 4. umístění str. Po memsetu, když vytiskneme paměť, dostaneme „ABCDxxxGH.“
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Příklad 3.C #zahrnout #zahrnout int main () int arr [5], i; memset (arr, 10,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); pro (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); návrat 0; |
V příkladu 3.c, deklarovali jsme celé číslo o velikosti 5 a pokoušíme se ho inicializovat o 10. Ale z výstupu jsme viděli, že pole není inicializováno 10; místo toho jsme dostali hodnotu „168430090“. Je to proto, že celočíselná hodnota je větší než jeden bajt a funkce memset před zkopírováním převede hodnotu na nepodepsaný znak. Nyní uvidíme, jak získáme hodnotu „168430090“.
Binární reprezentace 10 je 00000000 00000000 00000000 00001010.
Když se celé číslo převede na nepodepsaný znak, vezme se v úvahu spodní 1 bajt. Když se tedy 10 převede na nepodepsaný znak, je to binární reprezentace 00001010.
Funkce memset () nastavuje umístění paměti bajt po bajtu. Takže celkem 4 bajty budou: 00001010 00001010 00001010 00001010.
Desetinná hodnota binární reprezentace 4 bajtů je 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Příklad4.C #zahrnout #zahrnout int main () int arr [5], i; memset (arr, 0,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); pro (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); návrat 0; |
V příkladu 4.c, inicializovali jsme celé číslo o 0. Všechny bity binární reprezentace 0 jsou 0. Pole je tedy inicializováno 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Příklad 5.C #zahrnout #zahrnout int main () int arr [5], i; memset (arr, -1,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); pro (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); návrat 0; |
V příkladu 5.c, inicializovali jsme celé číslo o 0. Všechny bity binární reprezentace -1 jsou 1. Pole je tedy inicializováno -1.
Závěr:
V tomto článku jsme pomocí funkce memset viděli, jak můžeme efektivně inicializovat nebo nastavit hodnotu paměťového bloku. Můžeme nastavit libovolný znak a 0 nebo -1 jako celočíselnou hodnotu do bloku paměti. Funkce Memset je rychlejší pro nastavení velkého bloku souvislé paměti ve srovnání s jednoduchým nastavením umístění pomocí smyčky.