Hvordan memset -funksjonen brukes

Hvordan memset -funksjonen brukes

I C brukes memset () -funksjonen til å angi en en-byte-verdi til en minneblokk byte av byte. Denne funksjonen er nyttig for initialisering av en minneblokk byte av byte med en bestemt verdi. I denne artikkelen vil vi se i detalj hvordan denne funksjonen kan brukes. Så la oss komme i gang.

Headerfil:

streng.h

Syntaks:

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

Denne funksjonen angir den første n byte av minneblokken pekt av str av Ch.

Argumenter:

Funksjonen tar 3 argumenter:

  1. str: Dette er pekeren på minneplassen der minnet blir satt. Dette er en tomrom, så vi kan angi hvilken som helst type minneblokk, men minnet vil bli satt av byte av byte.
  2. Ch: Dette er verdien som skal kopieres til minneblokken. Dette er en heltallverdi, men den konverteres til en usignert karakter før kopiert.
  3. n: Dette er antall byte i minneblokken som er angitt.

Returverdier:

memset () Returnerer den første adressen til minneblokken der den begynner å angi verdien.

Eksempler:

// Eksempel1.c
#inkludere
#inkludere
int main ()

char str [30] = "abcd efgh";
printf ("før memset => %s", str);
memset (str, 'x', 3);
printf ("\ nafter memset => %s \ n", str);
retur 0;


I eksempel1.C, vi har erklært ett tegn på størrelse 30. Så har vi initialisert den med strengen “ABCD EFGH.”I memset -funksjonen har vi bestått 3 argumenter STR, 'X' og 3. Så minneblokken pekt av STR vil bli tilbakestilt de tre første tegnene av 'x.'Etter memset, når vi skriver ut minnet, får vi “xxxd efgh.”

// Eksempel2.c
#inkludere
#inkludere
int main ()

char str [30] = "abcd efgh";
printf ("før memset => %s", str);
memset (str+4, 'x', 3);
printf ("\ nafter memset => %s \ n", str);
retur 0;


I eksempel2.C, vi har passert STR+4 til memset -funksjon. Så det tilbakestiller minnet etter det fjerde plasseringen av STR. Etter memset, når vi skriver ut minnet, får vi “ABCDXXXGHGHGHGHG.”

// Eksempel3.c
#inkludere
#inkludere
int main ()

int arr [5], i;
memset (arr, 10,5*størrelse av (arr [0]));
printf ("\ narr elementer => \ n");
for (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
retur 0;


I eksempel3.C, vi har erklært et heltall med størrelse 5 og prøver å initialisere det med 10. Men fra utgangen har vi sett at matrisen ikke er initialisert med 10; I stedet har vi fått verdien “168430090”. Dette er fordi heltallverdien er større enn en byte og memsetfunksjonen konverterer verdien til en usignert karakter før kopiert. Nå får vi se hvordan vi får verdien “168430090”.


Den binære representasjonen av 10 er 00000000 00000000 00000000 00001010.

Når heltall konverteres til usignert røye, blir den nedre 1 byte vurdert. Så når 10 blir konvertert til usignert røye, er det en binær representasjon 00001010.

memset () -funksjonen angir minnested byte av byte. Så totalt 4 byte vil være: 00001010 00001010 00001010 00001010.

Desimalverdien av den binære representasjonen av 4 byte er 168430090.

// Eksempel4.c
#inkludere
#inkludere
int main ()

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


I eksempel4.C, vi har initialisert heltallsarrayen med 0. Alle biter av den binære representasjonen av 0 er 0. Så matrisen initialiseres med 0.

// Eksempel5.c
#inkludere
#inkludere
int main ()

int arr [5], i;
memset (arr, -1,5*størrelse av (arr [0]));
printf ("\ narr elementer => \ n");
for (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
retur 0;


I eksempel5.C, vi har initialisert heltallsarrayen med 0. Alle biter av den binære representasjonen av -1 er 1. Så matrisen initialiseres med -1.

Konklusjon:

I denne artikkelen har vi sett ved hjelp av memset -funksjonen hvordan vi kan initialisere eller angi verdien av en minneblokk effektivt. Vi kan angi hvilken som helst karakter og 0 eller -1 som en heltallverdi til en minneblokk. Memset -funksjonen er raskere for å sette en stor del av sammenhengende minne sammenlignet med å bare sette stedet ved hjelp av en loop.