C Programmeren

Hoe de Memset-functie wordt gebruikt

Hoe de Memset-functie wordt gebruikt

In C wordt de functie memset() gebruikt om een ​​waarde van één byte in te stellen op een geheugenblok, byte by byte. Deze functie is handig om een ​​geheugenblok byte voor byte te initialiseren met een bepaalde waarde. In dit artikel zullen we in detail zien hoe deze functie kan worden gebruikt. Dus laten we beginnen.

Header-bestand:

1
draad.h

Syntaxis:

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

Deze functie stelt de eerste in nee bytes van het geheugenblok waarnaar wordt verwezen door str door ch.

Argumenten:

De functie heeft 3 argumenten:

  1. str: Dit is de aanwijzer van de geheugenlocatie waar het geheugen zal worden ingesteld. Dit is een lege aanwijzer, dus we kunnen elk type geheugenblok instellen, maar het geheugen wordt byte voor byte ingesteld.
  2. ch: Dit is de waarde die naar het geheugenblok moet worden gekopieerd. Dit is een geheel getal, maar het wordt geconverteerd naar een teken zonder teken voordat het wordt gekopieerd.
  3. nee: Dit is het aantal bytes in het geheugenblok dat is ingesteld.

Retourwaarden:

memset() retourneert het eerste adres van het geheugenblok van waaruit het begint met het instellen van de waarde.

Voorbeelden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Voorbeeld 1.c
#include
#include
int hoofd()

char str[30] = "ABCD EFGH";
printf("Vóór memset => %s",str);
memset(str,'x',3);
printf("\nNa memset => %s\n",str);
retourneer 0;


In voorbeeld1.c, we hebben één tekenreeks van grootte 30 . gedeclareerd. Daarna hebben we het geïnitialiseerd met de string "ABCD EFGH".” In de memset-functie hebben we 3 argumenten str, 'x' en 3 . doorgegeven. Dus het geheugenblok dat door str wordt aangeduid, wordt de eerste 3 tekens gereset met 'x'.' Na memset, wanneer we het geheugen afdrukken, krijgen we "xxxD EFGH.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Voorbeeld2.c
#include
#include
int hoofd()

char str[30] = "ABCD EFGH";
printf("Vóór memset => %s",str);
memset(str+4,'x',3);
printf("\nNa memset => %s\n",str);
retourneer 0;


In voorbeeld2.c, we hebben str+4 doorgegeven aan de memset-functie. Dus het reset het geheugen na de 4e locatie van str.  Na memset, wanneer we het geheugen afdrukken, krijgen we "ABCDxxxGH.”

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

int arr[5],i;
memset(arr,10,5*sizeof(arr[0]));
printf("\narr Elementen => \n");
voor(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
retourneer 0;


In voorbeeld3.c, we hebben een integer-array van grootte 5 gedeclareerd en proberen deze te initialiseren met 10. Maar uit de uitvoer hebben we gezien dat de array niet is geïnitialiseerd met 10; in plaats daarvan hebben we de waarde "168430090". Dit komt omdat de integerwaarde groter is dan één byte en de memset-functie de waarde converteert naar een niet-ondertekend teken voordat het wordt gekopieerd. Nu zullen we zien hoe we de waarde "168430090" krijgen.


De binaire representatie van 10 is 00000000 00000000 00000000 00001010.

Wanneer integer wordt geconverteerd naar teken zonder teken, wordt de onderste 1 byte beschouwd by. Dus wanneer 10 wordt geconverteerd naar teken zonder teken, is het een binaire representatie is 00001010.

memset() functie stelt de geheugenlocatie byte by byte in. Dus in totaal 4 bytes zijn: 00001010 00001010 00001010 00001010.

De decimale waarde van de binaire weergave van 4 bytes is 168430090.

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

int arr[5],i;
memset(arr,0,5*sizeof(arr[0]));
printf("\narr Elementen => \n");
voor(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
retourneer 0;


In voorbeeld4.c, we hebben de integer-array geïnitialiseerd met 0. Alle bits van de binaire representatie van 0 is 0. Dus de array wordt geïnitialiseerd door 0.

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

int arr[5],i;
memset(arr,-1,5*sizeof(arr[0]));
printf("\narr Elementen => \n");
voor(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
retourneer 0;


In voorbeeld5.c, we hebben de integer-array geïnitialiseerd met 0. Alle bits van de binaire weergave van -1 is 1. Dus de array wordt geïnitialiseerd door -1.

Conclusie:

In dit artikel hebben we gezien hoe we met behulp van de memset-functie de waarde van een geheugenblok efficiënt kunnen initialiseren of instellen. We kunnen elk teken en 0 of -1 instellen als een geheel getal in een geheugenblok. De Memset-functie is sneller om een ​​groot deel van aaneengesloten geheugen in te stellen in vergelijking met het eenvoudig instellen van de locatie met behulp van een lus.

OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...
Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...