logo

Memset in C++

Memset() ist eine C++-Funktion. Es kopiert ein einzelnes Zeichen für eine bestimmte Anzahl von Malen in ein Objekt. Dies ist nützlich, um ausgehend von einem bestimmten Speicherort eine Anzahl von Bytes mit einem bestimmten Wert zu füllen. Es ist definiert in Header-Datei.

Syntax:



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

Memset() Konvertiert den Wert ch in ein vorzeichenloses Zeichen und kopiert ihn in jedes der ersten n Zeichen des Objekts, auf das str[] zeigt. Wenn das Objekt nicht trivial kopierbar ist (z. B. Skalar, Array oder eine C-kompatible Struktur), ist das Verhalten undefiniert. Wenn n größer als die Größe des Objekts ist, auf das str zeigt, ist das Verhalten undefiniert.

Parameter:

  • str[]: Zeiger auf das Objekt, um das Zeichen zu kopieren.
  • CH: Das zu kopierende Zeichen. Es kann ein Zeichen, ein normaler Wert sowie ein boolescher Wert sein.
  • N: Anzahl der zu kopierenden Bytes.

Rückgabewert: Die Funktion memset() gibt str zurück, den Zeiger auf die Zielzeichenfolge.



Zeitkomplexität: O(N) [Für die Durchquerung vom Anfang bis zum Ende des Objekts]
Komplexität des Hilfsraums: O(1)

Beispiel:

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

>

>

Ausgabe

tttttttttttttt>

Notiz: Wir können memset() verwenden, um auch für ganzzahlige Datentypen alle Werte auf 0 oder -1 zu setzen. Es funktioniert nicht, wenn wir damit andere Werte festlegen. Der Grund ist einfach: Memset arbeitet Byte für Byte.

tun, während in 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] <<>' '>;> }>

>

>

Ausgabe

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

Boolesches Beispiel:

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>

>

>

Ausgabe

1 1 1 1 1 true true true true true>

NOTIZ: Für boolean muss das Objekt vom Typ bool für C++ sein. Z.B. bool arr[n];

Vorteile der memset( )-Funktion

1. Erhöhen Sie die Lesbarkeit

Der Hauptzweck von memset() Die Funktion besteht darin, jedes Zeichen der gesamten Zeichenfolge in ein bestimmtes umzuwandeln int Wert, bevor Sie ihn als Eingabe übergeben. Es handelt sich um einen einzeiligen Code, der ihn sehr kompakt macht und insgesamt die Lesbarkeit verbessert.

2. Reduzieren Sie Codezeilen

Dadurch lässt sich die gleiche Aufgabe schneller erledigen als mit der mühsamen Technik memset() Funktion, die nur Eingaben akzeptiert, anstatt unnötige Schleifen zu verwenden, um den Wert jedes Zeichens in der Zeichenfolge zuzuweisen und in einen umzuwandeln int Wert.

3. Es ist schneller

Mit dieser Funktion lässt sich die gleiche Aufgabe schnell und nicht zeitaufwändig erledigen memset() Allein die Eingabe der Funktion, wodurch unnötige Schleifen zum Zuweisen und Konvertieren des Werts jedes Zeichens in der vermieden werden Zeichenfolge zu einem int Wert.

4. Nützlich bei der Beseitigung von Fehlausrichtungsproblemen

Das C++ memset() Die Funktion hilft dem Programmierer bei der Lösung des Problems der Fehlausrichtung. Es gibt Fälle, in denen Sie feststellen, dass der Prozessor Probleme mit der Datenausrichtung hat, was zu einem Programmierfehler führt. Der memcpy() Und memcmp() Methoden in C++ sind in dieser Situation die besten Optionen.

Notiz: Memset ist eine alte Funktion, die von C geerbt wurde. Sie ist nicht sehr flexibel, wenn es darum geht, den Speicher mit unterschiedlichen Datentypen und Werten zu füllen. Der std::fill Die Funktion ist eine bessere Alternative, die in der STL-Algorithmusbibliothek verfügbar ist.