Memset i C++

Memset() er en C++ funksjon. Den kopierer et enkelt tegn et bestemt antall ganger til et objekt. Det er nyttig for å fylle et antall byte med en gitt verdi fra en bestemt minneplassering. Det er definert i header-fil.

Syntaks:

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

Memset() konverterer verdien ch til usignert char og kopierer den inn i hvert av de første n tegnene i objektet pekt på av str[]. Hvis objektet ikke er trivielt kopierbart (f.eks. skalar, array eller en C-kompatibel struktur), er atferden udefinert. Hvis n er større enn størrelsen på objektet pekt på av str, er oppførselen udefinert.

Parametere:

  • str[]: Peker til objektet for å kopiere tegnet.
  • ch: Karakteren som skal kopieres. Det kan være et tegn, en normal verdi så vel som en boolsk verdi.
  • n: Antall byte å kopiere.

Returverdi: Memset()-funksjonen returnerer str, pekeren til målstrengen.

Tidskompleksitet: O(N) [For å gå fra begynnelsen til slutten av objektet]
Ekstra romkompleksitet: O(1)

Eksempel:

C++




// C++ program to demonstrate memset> #include> #include> using> namespace> std;> // Driver Code> int> main()> {> > char> str[] => 'geeksforgeeks'> ;> > memset> (str,> 't'> ,> sizeof> (str));> > cout < < str;> > return> 0;> }>

Produksjon

tttttttttttttt 

Merk: Vi kan bruke memset() for å sette alle verdier som 0 eller -1 for integrerte datatyper også. Det vil ikke fungere hvis vi bruker det til å angi som andre verdier. Årsaken er enkel, memset fungerer byte for byte.

C++




// C++ Program to demonstrate that we can use memset() to> // set all values as 0 or -1 for integral data types also> #include> using> namespace> std;> // Driver Code> int> main()> {> > int> a[5];> > // all elements of A are zero> > memset> (a, 0,> sizeof> (a));> > for> (> int> i = 0; i <5; i++)> > cout < < a[i] < <> ' '> ;> > cout < < endl;> > // all elements of A are -1> > memset> (a, -1,> sizeof> (a));> > for> (> int> i = 0; i <5; i++)> > cout < < a[i] < <> ' '> ;> > cout < < endl;> > // Would not work> > memset> (a, 5,> sizeof> (a));> // WRONG> > for> (> int> i = 0; i <5; i++)> > cout < < a[i] < <> ' '> ;> }>

Produksjon

0 0 0 0 0 -1 -1 -1 -1 -1 84215045 84215045 84215045 84215045 84215045 

boolsk eksempel:

C++




// C++ Program to demonstrate that we can use memset() to> // set all values as boolean data types also> #include> using> namespace> std;> int> main()> {> > bool> prime[5];> > memset> (prime,> true> ,> sizeof> (prime));> > // If you print without using boolalpha it will print> > // like this> > for> (> int> i = 0; i <5; i++)> > cout < < prime[i] < <> ' '> ;> > cout < <> ' '> ;> > // If you use boolalpha it will print like this> > for> (> int> i = 0; i <5; i++)> > cout < < boolalpha < < prime[i] < <> ' '> ;> > return> 0;> }> // This code is contributed by Susobhan Akhuli>

Produksjon

1 1 1 1 1 true true true true true 

MERK: For boolsk må objektet være av bool-type for C++. F.eks. bool arr[n];

Fordeler med memset( ) funksjon

1. Øk lesbarheten

Hovedformålet med memset() funksjonen er å transformere hvert tegn i hele strengen til en bestemt int verdi før du sender den som input. Det er en én-linjes kode, noe som gjør den svært kompakt og forbedrer lesbarheten totalt sett.

2. Reduser kodelinjer

Den samme oppgaven har blitt utført raskere enn den møysommelige teknikken ved å bruke denne memset() funksjon, som bare aksepterer input, i stedet for den unødvendige bruken av løkker for å tilordne og konvertere verdien av hvert tegn i strengen til en int verdi.

3. Det er raskere

Den samme oppgaven har blitt utført raskt i motsetning til den tidkrevende måten ved å bruke dette memset() funksjonens inngang alene, noe som eliminerer behovet for unødvendige løkker for å tilordne og konvertere verdien til hvert tegn i streng til en int verdi.

4. Nyttig for å bli kvitt feiljusteringsproblemet

C++ memset() funksjon hjelper programmereren med å løse feiljusteringsproblemet. Det er tilfeller der du oppdager at prosessoren har problemer med datajustering, noe som resulterer i en programmeringsfeil. De memcpy() og memcmp() metoder i C++ er de beste alternativene i denne situasjonen.

Merk: memset er en gammel funksjon som er arvet fra C. Den er lite fleksibel når man fyller minne med forskjellige datatyper og verdier. De std::fyll funksjonen er et bedre alternativ tilgjengelig i STL Algorithm-biblioteket.