logo

Memset in C++

Memset() is een C++-functie. Het kopieert een enkel teken een bepaald aantal keren naar een object. Het is handig om een ​​aantal bytes met een bepaalde waarde te vullen, beginnend vanaf een specifieke geheugenlocatie. Het is gedefinieerd in header-bestand.

Syntaxis:



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

Memset() converteert de waarde ch naar niet-ondertekende char en kopieert deze naar elk van de eerste n karakters van het object waarnaar wordt verwezen door str[]. Als het object niet triviaal kopieerbaar is (bijvoorbeeld scalair, array of een C-compatibele struct), is het gedrag ongedefinieerd. Als n groter is dan de grootte van het object waarnaar str verwijst, is het gedrag ongedefinieerd.

Parameters:

  • str[]: Wijzer naar het object om het teken te kopiëren.
  • ch: Het teken dat moet worden gekopieerd. Het kan een teken, een normale waarde of een Booleaanse waarde zijn.
  • N: Aantal bytes dat moet worden gekopieerd.

Winstwaarde: De functie memset() retourneert str, de verwijzing naar de bestemmingsreeks.



Tijdcomplexiteit: O(N) [Voor verplaatsing van begin tot einde van het object]
Complexiteit van de hulpruimte: O(1)

Voorbeeld:

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

>

>

Uitvoer

tttttttttttttt>

Opmerking: We kunnen memset() ook gebruiken om alle waarden in te stellen op 0 of -1 voor integrale gegevenstypen. Het zal niet werken als we het gebruiken om andere waarden in te stellen. De reden is simpel: memset werkt byte voor byte.

hoe een geheel getal naar een string Java te converteren

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

>

>

Uitvoer

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

Booleaans voorbeeld:

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>

>

>

Uitvoer

1 1 1 1 1 true true true true true>

OPMERKING: Voor boolean moet het object van het bool-type zijn voor C++. Bijv. bool arr[n];

Voordelen van de memset()-functie

1. Vergroot de leesbaarheid

Het voornaamste doel van memset() De functie is om elk karakter van de hele string om te zetten in een specifiek karakter int waarde voordat u deze als invoer doorgeeft. Het is een stuk code van één regel, waardoor het zeer compact is en de algehele leesbaarheid verbetert.

2. Reduceer het aantal regels code

Dezelfde taak is sneller volbracht dan de bewerkelijke techniek door hiervan gebruik te maken memset() functie, die alleen invoer accepteert, in plaats van het onnodige gebruik van lussen om de waarde van elk teken in de string toe te wijzen en te converteren naar een int waarde.

3. Het is sneller

Dezelfde taak is snel volbracht in plaats van op de tijdrovende manier door dit te gebruiken memset() alleen de invoer van de functie, waardoor er geen onnodige lussen nodig zijn om de waarde van elk teken in de snaar aan een int waarde.

4. Nuttig bij het wegwerken van een probleem met een verkeerde uitlijning

De C++ memset() -functie helpt de programmeur bij het oplossen van het probleem met de verkeerde uitlijning. Er zijn gevallen waarin u ontdekt dat de processor problemen heeft met het uitlijnen van gegevens, wat resulteert in een programmeerfout. De memcpy() En memcmp() methoden in C++ zijn de beste opties in deze situatie.

Opmerking: memset is een oude functie die is geërfd van C. Het is niet erg flexibel bij het vullen van het geheugen met verschillende gegevenstypen en waarden. De std::vul functie is een beter alternatief beschikbaar in de STL-algoritmebibliotheek.