logo

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.

strengformat i java

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.