C Programmering

Hur Memset-funktionen används

Hur Memset-funktionen används

I C används funktionen memset () för att ställa in ett bytevärde till ett minnesblock byte för byte. Denna funktion är användbar för initialisering av ett minnesblock byte för byte med ett visst värde. I den här artikeln kommer vi att se i detalj hur denna funktion kan användas. Så, låt oss komma igång.

Rubrikfil:

1
sträng.h

Syntax:

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

Den här funktionen ställer in den första byte i minnesblocket pekade av str förbi ch.

Argument:

Funktionen tar 3 argument:

  1. str: Detta är pekaren på minnesplatsen där minnet ska ställas in. Detta är en ogiltig pekare, så vi kan ställa in vilken typ av minne som helst, men minnet ställs in byte för byte.
  2. ch: Detta är det värde som ska kopieras till minnesblocket. Detta är ett heltal, men det konverteras till ett osignerat tecken innan det kopieras.
  3. n: Detta är antalet byte i minnesblocket som ställts in.

Returvärden:

memset () returnerar den första adressen till minnesblocket varifrån den börjar ställa in värdet.

Exempel:

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

char str [30] = "ABCD EFGH";
printf ("Before memset =>% s", str);
memset (str, 'x', 3);
printf ("\ nEfter memset =>% s \ n", str);
returnera 0;


I exempel 1.c, vi har förklarat en teckenuppsättning av storlek 30. Sedan har vi initierat den med strängen “ABCD EFGH.”I memset-funktionen har vi skickat 3 argument str, 'x' och 3. Så, minnesblocket som pekas av str återställs de första 3 tecknen med 'x.'Efter memset, när vi skriver ut minnet, får vi "xxxD EFGH.”

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

char str [30] = "ABCD EFGH";
printf ("Before memset =>% s", str);
memset (str + 4, 'x', 3);
printf ("\ nEfter memset =>% s \ n", str);
returnera 0;


I exempel 2.c, vi har skickat str + 4 till memset-funktionen. Så det återställer minnet efter den fjärde platsen för str.  Efter memset, när vi skriver ut minnet, får vi “ABCDxxxGH.”

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

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


I exempel 3.c, vi har förklarat en heltalsserie av storlek 5 och försöker initialisera den med 10. Men från utdata har vi sett att matrisen inte initialiserats med 10; istället har vi värdet “168430090”. Detta beror på att heltalets värde är större än en byte och memset-funktionen omvandlar värdet till ett osignerat tecken innan det kopieras. Nu får vi se hur vi får värdet “168430090”.


Den binära representationen av 10 är 00000000 00000000 00000000 00001010.

När heltal omvandlas till osignerad röd, beaktas den lägre 1 byten. Så när 10 konverteras till osignerad röd, är det en binär representation är 00001010.

memset () -funktionen ställer in minnesplats byte för byte. Så totalt kommer 4 byte att vara: 00001010 00001010 00001010 00001010.

Decimalvärdet för den binära representationen av 4 byte är 168430090.

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

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


I exempel 4.c, vi har initierat heltalet med 0. Alla bitar i den binära representationen av 0 är 0. Så matrisen initialiseras med 0.

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

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


I exempel 5.c, vi har initierat heltalet med 0. Alla bitar i den binära representationen av -1 är 1. Så matrisen initialiseras med -1.

Slutsats:

I den här artikeln har vi sett med hjälp av memset-funktionen hur vi kan initiera eller ställa in värdet på ett minnesblock effektivt. Vi kan ställa in vilket tecken som helst och 0 eller -1 som ett heltal till ett minnesblock. Memset-funktionen är snabbare för att ställa in en stor bit av angränsande minne jämfört med att helt enkelt ställa in platsen med en slinga.

Mus Mus vänsterklicka på knappen fungerar inte på Windows 10
Mus vänsterklicka på knappen fungerar inte på Windows 10
Om du använder en dedikerad mus med din bärbara dator eller stationära dator men musens vänsterklick-knapp fungerar inte på Windows 10/8/7 av någon an...
Mus Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Om du upptäcker att muspekaren hoppar eller rör sig på egen hand, automatiskt, slumpmässigt när du skriver in Windows-bärbar dator eller dator, kan nå...
Mus Så här vänder du mus- och styrplattans rullningsriktning i Windows 10
Så här vänder du mus- och styrplattans rullningsriktning i Windows 10
Mus och Pekplattas gör inte bara datoranvändning lättare men effektivare och mindre tidskrävande. Vi kan inte föreställa oss ett liv utan dessa enhete...