logo

Memset i C++

Memset() är en C++-funktion. Den kopierar ett enstaka tecken ett visst antal gånger till ett objekt. Det är användbart för att fylla ett antal byte med ett givet värde från en specifik minnesplats. Det definieras i header-fil.

Syntax:



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

Memset() konverterar värdet ch till char utan tecken och kopierar det till vart och ett av de första n tecknen i objektet som pekas på av str[]. Om objektet inte är trivialt kopierbart (t.ex. skalär, array eller en C-kompatibel struktur) är beteendet odefinierat. Om n är större än storleken på objektet som pekas på av str, är beteendet odefinierat.

Parametrar:

  • str[]: Pekare till objektet för att kopiera tecknet.
  • ch: Karaktären att kopiera. Det kan vara ett tecken, ett normalt värde såväl som ett booleskt värde.
  • n: Antal byte att kopiera.

Returvärde: Funktionen memset() returnerar str, pekaren till målsträngen.



Tidskomplexitet: O(N) [För genomflyttning från början till slutet av objektet]
Extra rymdkomplexitet: O(1)

Exempel:

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>

Notera: Vi kan använda memset() för att ställa in alla värden som 0 eller -1 för integraldatatyper också. Det kommer inte att fungera om vi använder det för att ställa in som andra värden. Anledningen är enkel, memset fungerar byte för byte.

powershell kommentar multiline

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>

booleskt exempel:

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>

NOTERA: För boolean måste objektet vara av bool-typ för C++. T.ex. bool arr[n];

Fördelar med memset( ) funktion

1. Öka läsbarheten

Huvudsyftet med memset() Funktionen är att omvandla varje tecken i hela strängen till en specifik int värde innan du skickar det som indata. Det är en enradskod, vilket gör den mycket kompakt och förbättrar läsbarheten totalt sett.

2. Minska rader kod

Samma uppgift har åstadkommits snabbare än den mödosamma tekniken genom att använda denna memset() funktion, som bara accepterar input, snarare än den onödiga användningen av loopar för att tilldela och konvertera värdet för varje tecken i strängen till en int värde.

3. Det är snabbare

Samma uppgift har åstadkommits snabbt i motsats till det tidskrävande sättet genom att använda detta memset() enbart funktions inmatning, vilket eliminerar behovet av onödiga loopar för att tilldela och konvertera värdet för varje tecken i sträng till en int värde.

4. Användbar för att bli av med feljusteringsproblem

C++ memset() funktion hjälper programmeraren att lösa feljusteringsproblemet. Det finns tillfällen där du upptäcker att processorn har problem med datajustering, vilket resulterar i ett programmeringsfel. De memcpy() och memcmp() metoder i C++ är de bästa alternativen i denna situation.

Notera: memset är en gammal funktion som ärvts från C. Den är inte särskilt flexibel när man fyller minne med olika datatyper och värden. De std::fyll funktion är ett bättre alternativ tillgängligt i STL Algorithm-biblioteket.