I C bruges funktionen memset () til at indstille en en-byte-værdi til en hukommelsesblokbyte for byte. Denne funktion er nyttig til initialisering af en hukommelsesblokbyte for byte med en bestemt værdi. I denne artikel vil vi se detaljeret, hvordan denne funktion kan bruges. Så lad os komme i gang.
Overskriftsfil:
1 | snor.h |
Syntaks:
1 | ugyldig * memset (ugyldig * str, int ch, størrelse_t n) |
Denne funktion indstiller den første n bytes i hukommelsesblokken peget af str ved ch.
Argumenter:
Funktionen tager 3 argumenter:
- str: Dette er markøren på hukommelsesplaceringen, hvor hukommelsen indstilles. Dette er en ugyldig markør, så vi kan indstille enhver form for hukommelsesblok, men hukommelsen indstilles byte for byte.
- ch: Dette er den værdi, der skal kopieres til hukommelsesblokken. Dette er et heltal, men det konverteres til et usigneret tegn, før det kopieres.
- n: Dette er antallet af bytes i hukommelsesblokken, der er indstillet.
Returværdier:
memset () returnerer den første adresse på hukommelsesblokken, hvorfra den begynder at indstille værdien.
Eksempler:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Eksempel1.c #omfatte #omfatte int main () char str [30] = "ABCD EFGH"; printf ("Before memset =>% s", str); memset (str, 'x', 3); printf ("\ nEfter memset =>% s \ n", str); returnere 0; |
I eksempel 1.c, vi har erklæret et tegnarray af størrelse 30. Derefter har vi initialiseret det med strengen “ABCD EFGH.”I memset-funktionen har vi bestået 3 argumenter str, 'x' og 3. Så hukommelsesblokken peget af str nulstilles de første 3 tegn med 'x.'Efter memset, når vi udskriver hukommelsen, får vi “xxxD EFGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Eksempel2.c #omfatte #omfatte int main () char str [30] = "ABCD EFGH"; printf ("Before memset =>% s", str); memset (str + 4, 'x', 3); printf ("\ nEfter memset =>% s \ n", str); returnere 0; |
I eksempel 2.c, vi har sendt str + 4 til memset-funktion. Så det nulstillede hukommelsen efter den 4. placering af str. Efter memset, når vi udskriver hukommelsen, får vi “ABCDxxxGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Eksempel3.c #omfatte #omfatte int main () int arr [5], i; memset (arr, 10,5 * størrelse af (arr [0])); printf ("\ narr Elements => \ n"); for (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); returnere 0; |
I eksempel 3.c, vi har erklæret et heltal array af størrelse 5 og forsøger at initialisere det med 10. Men fra output har vi set, at arrayet ikke er initialiseret med 10; i stedet har vi værdien “168430090”. Dette skyldes, at heltalets værdi er større end en byte, og memset-funktionen konverterer værdien til et usigneret tegn, før det kopieres. Nu vil vi se, hvordan vi får værdien “168430090”.
Den binære repræsentation af 10 er 00000000 00000000 00000000 00001010.
Når heltal konverteres til usigneret char, betragtes den nedre 1 byte. Så når 10 konverteres til usigneret char, er det en binær repræsentation er 00001010.
memset () -funktionen indstiller hukommelsesplaceringen byte for byte. I alt 4 bytes vil således være: 00001010 00001010 00001010 00001010.
Decimalværdien af den binære repræsentation af 4 byte er 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Eksempel 4.c #omfatte #omfatte int main () int arr [5], i; memset (arr, 0,5 * størrelse af (arr [0])); printf ("\ narr Elements => \ n"); for (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); returnere 0; |
I eksempel 4.c, vi har initialiseret heltal-arrayet med 0. Alle bits i den binære repræsentation af 0 er 0. Så arrayet initialiseres med 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Eksempel 5.c #omfatte #omfatte int main () int arr [5], i; memset (arr, -1,5 * størrelse af (arr [0])); printf ("\ narr Elements => \ n"); for (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); returnere 0; |
I eksempel 5.c, vi har initialiseret heltal-arrayet med 0. Alle bits i den binære repræsentation af -1 er 1. Så matrixen initialiseres med -1.
Konklusion:
I denne artikel har vi set ved hjælp af memset-funktionen, hvordan vi kan initialisere eller indstille værdien af en hukommelsesblok effektivt. Vi kan indstille ethvert tegn og 0 eller -1 som et heltal til en hukommelsesblok. Memset-funktionen er hurtigere for at indstille et stort stykke sammenhængende hukommelse sammenlignet med blot at indstille placeringen ved hjælp af en sløjfe.