logo

Memset în C++

Memset() este o funcție C++. Copiază un singur caracter pentru un anumit număr de ori pe un obiect. Este util pentru completarea unui număr de octeți cu o valoare dată pornind de la o anumită locație de memorie. Este definit în fișier antet.

Sintaxă:



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

Memset() convertește valoarea ch în char unsigned și o copiază în fiecare dintre primele n caractere ale obiectului indicat de str[]. Dacă obiectul nu poate fi copiat în mod trivial (de exemplu, scalar, matrice sau o structură compatibilă cu C), comportamentul este nedefinit. Dacă n este mai mare decât dimensiunea obiectului indicat de str, comportamentul este nedefinit.

Parametri:

  • str[]: Indicator către obiect pentru a copia caracterul.
  • ch: Personajul de copiat. Poate fi un caracter, o valoare normală și o valoare booleană.
  • n: Numărul de octeți de copiat.

Valoare returnată: Funcția memset() returnează str, indicatorul către șirul de destinație.



Complexitatea timpului: O(N) [Pentru traversarea de la începutul până la sfârșitul obiectului]
Complexitatea spațiului auxiliar: O(1)

Exemplu:

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

>

>

Ieșire

tttttttttttttt>

Notă: Putem folosi memset() pentru a seta toate valorile ca 0 sau -1 și pentru tipurile de date integrale. Nu va funcționa dacă îl folosim pentru a seta alte valori. Motivul este simplu, memset funcționează octet cu octet.

kat timpf greutate

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

>

>

Ieșire

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

Exemplu boolean:

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>

>

>

Ieșire

1 1 1 1 1 true true true true true>

NOTĂ: Pentru boolean obiectul trebuie să fie de tip bool pentru C++. De exemplu. bool arr[n];

Avantajele funcției memset().

1. Creșteți lizibilitatea

Scopul principal al memset() funcția este de a transforma fiecare caracter al întregului șir într-un specific int valoare înainte de a o trece ca intrare. Este o bucată de cod cu o singură linie, ceea ce o face foarte compactă și îmbunătățește lizibilitatea în general.

2. Reduceți liniile de cod

Aceeași sarcină a fost realizată mai repede decât tehnica laborioasă prin utilizarea acesteia memset() funcție, care acceptă doar intrare, mai degrabă decât utilizarea inutilă a buclelor pentru a atribui și converti valoarea fiecărui caracter din șir într-un int valoare.

3. Este mai rapid

Aceeași sarcină a fost realizată rapid, spre deosebire de modul consumator de timp prin utilizarea acestuia memset() numai intrarea funcției, ceea ce elimină necesitatea buclelor inutile pentru a atribui și converti valoarea fiecărui caracter din şir la un int valoare.

4. Util pentru a scăpa de Problema de dezaliniere

C++ memset() funcția ajută programatorul în rezolvarea problemei de dezaliniere. Există cazuri în care descoperiți că procesorul are probleme cu alinierea datelor, ceea ce duce la o greșeală de programare. The memcpy() și memcmp() metodele în C++ sunt cele mai bune opțiuni în această situație.

Notă: memset este o funcție veche moștenită de la C. Nu este foarte flexibil atunci când umple memoria cu diferite tipuri de date și valori. The std::fill funcția este o alternativă mai bună disponibilă în biblioteca de algoritmi STL.