logo

Memset i C++

Memset() er en C++ funktion. Den kopierer et enkelt tegn et bestemt antal gange til et objekt. Det er nyttigt til at fylde et antal bytes med en given værdi startende fra en bestemt hukommelsesplacering. Det er defineret i header-fil.

Syntaks:



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

Memset() konverterer værdien ch til usigneret char og kopierer den til hvert af de første n tegn i objektet, der peges på af str[]. Hvis objektet ikke er trivielt kopierbart (f.eks. skalar, array eller en C-kompatibel struktur), er adfærden udefineret. Hvis n er større end størrelsen af ​​objektet, der peges på af str, er adfærden udefineret.

Parametre:

  • str[]: Marker til objektet for at kopiere tegnet.
  • ch: Karakteren, der skal kopieres. Det kan være et tegn, en normal værdi såvel som en boolsk værdi.
  • n: Antal bytes, der skal kopieres.

Returværdi: Funktionen memset() returnerer str, markøren til destinationsstrengen.



Tidskompleksitet: O(N) [Til gennemkørsel fra begyndelsen til slutningen af ​​objektet]
Ekstra rumkompleksitet: 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;> }>

>

>

Produktion

tttttttttttttt>

Bemærk: Vi kan også bruge memset() til at indstille alle værdier som 0 eller -1 for integrale datatyper. Det vil ikke fungere, hvis vi bruger det til at indstille som andre værdier. Årsagen er enkel, memset fungerer byte for byte.

hvordan man udfører et script

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] <<>' '>;> }>

>

>

Produktion

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>

>

>

Produktion

1 1 1 1 1 true true true true true>

BEMÆRK: For boolesk skal objektet være af bool-type for C++. F.eks. bool arr[n];

Fordele ved memset( ) funktion

1. Øg læsbarheden

Hovedformålet med memset() Funktionen er at transformere hvert tegn i hele strengen til en bestemt int værdi, før den overføres som input. Det er et stykke kode på én linje, hvilket gør det meget kompakt og forbedrer læsbarheden generelt.

2. Reducer kodelinjer

Den samme opgave er blevet udført hurtigere end den besværlige teknik ved at bruge denne memset() funktion, som blot accepterer input, snarere end den unødvendige brug af loops til at tildele og konvertere værdien af ​​hvert tegn i strengen til en int værdi.

3. Det er hurtigere

Den samme opgave er blevet løst hurtigt i modsætning til den tidskrævende måde ved at bruge denne memset() funktions input alene, hvilket eliminerer behovet for unødvendige loops til at tildele og konvertere værdien af ​​hvert tegn i snor til en int værdi.

4. Nyttigt til at slippe af med fejljusteringsproblem

C++ memset() funktion hjælper programmøren med at løse fejljusteringsproblemet. Der er tilfælde, hvor du opdager, at processoren har problemer med datajustering, hvilket resulterer i en programmeringsfejl. Det memcpy() og memcmp() metoder i C++ er de bedste muligheder i denne situation.

Bemærk: memset er en gammel funktion, der er arvet fra C. Den er ikke særlig fleksibel, når man fylder hukommelsen med forskellige datatyper og værdier. Det std::fyld funktion er et bedre alternativ tilgængeligt i STL Algorithm-biblioteket.