V C se funkcija memset () uporablja za nastavitev enobajtne vrednosti na bajt za bajtom. Ta funkcija je uporabna za inicializacijo bajta za bajtom pomnilnika z določeno vrednostjo. V tem članku bomo podrobno videli, kako lahko to funkcijo uporabljamo. Torej, začnimo.
Datoteka glave:
1 | vrvica.h |
Sintaksa:
1 | void * memset (void * str, int ch, size_t n) |
Ta funkcija nastavi prvo n bajtov pomnilniškega bloka, ki ga kaže str avtor pogl.
Argumenti:
Funkcija zajema 3 argumente:
- str: To je kazalec mesta v pomnilniku, kjer bo nastavljen pomnilnik. To je void kazalec, zato lahko nastavimo katero koli vrsto pomnilniškega bloka, vendar bo pomnilnik nastavljen po bajtih.
- pogl: To je vrednost, ki jo želite kopirati v pomnilniški blok. To je celoštevilčna vrednost, ki pa se pred kopiranjem pretvori v nepodpisan znak.
- n: To je število bajtov v nastavljenem pomnilniškem bloku.
Vrnjene vrednosti:
memset () vrne prvi naslov pomnilniškega bloka, od koder začne nastavljati vrednost.
Primeri:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Primer1.c #include #include int main () char str [30] = "ABCD EFGH"; printf ("Pred memset =>% s", str); memset (str, 'x', 3); printf ("\ nPo memsetu =>% s \ n", str); vrnitev 0; |
V primeru1.c, razglasili smo eno znakovno polje velikosti 30. Nato smo ga inicializirali z nizom »ABCD EFGH.”V funkciji memset smo podali 3 argumente str, 'x' in 3. Torej, pomnilniški blok, na katerega kaže str, bo prve tri znake ponastavil z 'x'.'Po memsetu, ko natisnemo pomnilnik, bomo dobili "xxxD EFGH."
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Primer2.c #include #include int main () char str [30] = "ABCD EFGH"; printf ("Pred memset =>% s", str); memset (str + 4, 'x', 3); printf ("\ nPo memsetu =>% s \ n", str); vrnitev 0; |
V primeru2.c, funkciji memset smo predali str + 4. Torej je ponastavil pomnilnik po 4. mestu str. Ko memset natisnemo pomnilnik, bomo dobili “ABCDxxxGH."
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Primer3.c #include #include int main () int arr [5], i; memset (arr, 10,5 * sizeof (arr [0])); printf ("\ narr Elementi => \ n"); za (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); vrnitev 0; |
V primeru3.c, razglasili smo celoštevilsko matriko velikosti 5 in jo poskušali inicializirati do 10. Toda iz izhoda smo videli, da matrika ni inicializirana z 10; namesto tega imamo vrednost "168430090". To je zato, ker je celoštevilska vrednost večja od enega bajta in funkcija memset pred kopiranjem pretvori vrednost v nepodpisan znak. Zdaj bomo videli, kako bomo dobili vrednost "168430090".
Binarna predstavitev 10 je 00000000 00000000 00000000 00001010.
Ko se celo število pretvori v nepodpisani char, se upošteva spodnji 1 bajt. Torej, ko se 10 pretvori v nepodpisani char, je binarna predstavitev 00001010.
Funkcija memset () nastavi bajt za lokacijo pomnilnika. Torej, skupaj bodo 4 bajti: 00001010 00001010 00001010 00001010.
Decimalna vrednost binarne predstavitve 4 bajtov je 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Primer4.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"); vrnitev 0; |
V primeru4.c, celoštevilsko matriko smo inicializirali z 0. Vsi biti binarne predstavitve 0 so 0. Torej je matrika inicializirana z 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Primer5.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"); vrnitev 0; |
V primeru5.c, celoštevilsko matriko smo inicializirali z 0. Vsi biti binarne predstavitve -1 so 1. Torej je matrika inicializirana z -1.
Zaključek:
V tem članku smo s pomočjo funkcije memset videli, kako lahko učinkovito inicializiramo ali nastavimo vrednost pomnilniškega bloka. Pomnilniškemu bloku lahko nastavimo poljuben znak in 0 ali -1 kot celoštevilčno vrednost. Funkcija Memset hitreje nastavi velik del neprekinjenega pomnilnika v primerjavi s preprosto nastavitvijo lokacije z zanko.