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.