C Programmering

Sådan bruges Memset-funktion

Sådan bruges Memset-funktion

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 bytes i hukommelsesblokken peget af str ved ch.

Argumenter:

Funktionen tager 3 argumenter:

  1. 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.
  2. 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.
  3. 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.

5 bedste arkadespil til Linux
I dag er computere seriøse maskiner, der bruges til spil. Hvis du ikke kan få den nye høje score, ved du hvad jeg mener. I dette indlæg vil du kende n...
Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...
Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...