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.