logo

Memset en C++

Memset() és una funció C++. Copia un únic caràcter durant un nombre determinat de vegades a un objecte. És útil per omplir un nombre de bytes amb un valor donat a partir d'una ubicació de memòria específica. Es defineix a fitxer de capçalera.

Sintaxi:



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

Memset() converteix el valor ch en char sense signe i el copia a cadascun dels n primers caràcters de l'objecte assenyalat per str[]. Si l'objecte no es pot copiar de manera trivial (per exemple, escalar, matriu o una estructura compatible amb C), el comportament no està definit. Si n és més gran que la mida de l'objecte apuntat per str, el comportament no està definit.

Paràmetres:

  • str[]: Puntera a l'objecte per copiar el caràcter.
  • ch: El personatge a copiar. Pot ser un caràcter, un valor normal i un valor booleà.
  • n: Nombre de bytes per copiar.

Valor de retorn: La funció memset() retorna str, el punter a la cadena de destinació.



Complexitat temporal: O(N) [Per a la travessa des del principi fins al final de l'objecte]
Complexitat de l'espai auxiliar: O(1)

Exemple:

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

>

>

Sortida

tttttttttttttt>

Nota: També podem utilitzar memset() per establir tots els valors com a 0 o -1 per als tipus de dades integrals. No funcionarà si l'utilitzem per establir com a altres valors. La raó és simple, memset funciona byte a byte.

seleccioneu entre diverses taules en sql

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

>

>

Sortida

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

Exemple booleà:

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>

>

>

Sortida

1 1 1 1 1 true true true true true>

NOTA: Per a boolean, l'objecte ha de ser de tipus bool per a C++. Per exemple. bool arr[n];

Avantatges de la funció memset().

1. Augmentar la llegibilitat

La finalitat principal de memset() La funció és transformar cada caràcter de tota la cadena en un específic int valor abans de passar-lo com a entrada. És una peça de codi d'una línia, el que el fa molt compacte i millora la llegibilitat en general.

2. Reduir les línies de codi

La mateixa tasca s'ha realitzat més ràpidament que la laboriosa tècnica utilitzant això memset() funció, que només accepta l'entrada, en lloc de l'ús innecessari de bucles per assignar i convertir el valor de cada caràcter de la cadena en un int valor.

3. És més ràpid

La mateixa tasca s'ha realitzat ràpidament en lloc de la manera que requereix molt de temps amb això memset() només l'entrada de la funció, que elimina la necessitat de bucles innecessaris per assignar i convertir el valor de cada caràcter a la corda a un int valor.

4. Útil per desfer-se del problema de desalineació

El C++ memset() La funció ajuda el programador a resoldre el problema de la desalineació. Hi ha casos en què descobreixes que el processador té problemes amb l'alineació de dades, cosa que provoca un error de programació. El memcpy() i memcmp() Els mètodes en C++ són les millors opcions en aquesta situació.

Nota: memset és una funció antiga heretada de C. No és gaire flexible a l'hora d'omplir la memòria amb diferents tipus de dades i valors. El std::omplir La funció és una millor alternativa disponible a la biblioteca d'algoritmes STL.