Memset() è una funzione C++. Copia un singolo carattere per un numero specificato di volte su un oggetto. È utile per riempire un numero di byte con un dato valore a partire da una specifica posizione di memoria. È definito in file di intestazione.
Sintassi:
void* memset( void* str, int ch, size_t n);>
Memset() converte il valore ch in unsigned char e lo copia in ciascuno dei primi n caratteri dell'oggetto puntato da str[]. Se l'oggetto non è facilmente copiabile (ad esempio, scalare, array o una struttura compatibile con C), il comportamento non è definito. Se n è maggiore della dimensione dell'oggetto puntato da str, il comportamento non è definito.
parametri:
- str[]: Puntatore all'oggetto per copiare il carattere.
- cap: Il carattere da copiare. Può essere un carattere, un valore normale o un valore booleano.
- N: Numero di byte da copiare.
Valore di ritorno: La funzione memset() restituisce str, il puntatore alla stringa di destinazione.
Complessità temporale: O(N) [Per attraversare dall'inizio alla fine dell'oggetto]
Complessità dello spazio ausiliario: O(1)
Esempio:
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;> }> |
>
>Produzione
tttttttttttttt>
Nota: Possiamo usare memset() per impostare tutti i valori come 0 o -1 anche per i tipi di dati integrali. Non funzionerà se lo usiamo per impostare altri valori. Il motivo è semplice, memset funziona byte per byte.
è una relazione
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] <<>' '>;> }> |
>
>Produzione
0 0 0 0 0 -1 -1 -1 -1 -1 84215045 84215045 84215045 84215045 84215045>
Esempio booleano:
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> |
>
>Produzione
1 1 1 1 1 true true true true true>
NOTA: Per booleano l'oggetto deve essere di tipo bool per C++. Per esempio. bool arr[n];
Vantaggi della funzione memset()
1. Aumenta la leggibilità
Lo scopo principale di memset() La funzione è trasformare ogni carattere dell'intera stringa in uno specifico int valore prima di passarlo come input. È un pezzo di codice di una riga, il che lo rende estremamente compatto e migliora la leggibilità complessiva.
2. Ridurre le righe di codice
Utilizzando questo, lo stesso compito è stato portato a termine più rapidamente rispetto alla laboriosa tecnica memset() funzione, che accetta semplicemente input, anziché l'uso non necessario di cicli per assegnare e convertire il valore di ciascun carattere nella stringa in un int valore.
3. È più veloce
Lo stesso compito è stato portato a termine rapidamente rispetto al modo dispendioso in termini di tempo utilizzando questo memset() solo l'input della funzione, eliminando la necessità di cicli inutili per assegnare e convertire il valore di ciascun carattere nel file corda ad int valore.
4. Utile per eliminare il problema del disallineamento
Il C++ memset() la funzione aiuta il programmatore a risolvere il problema del disallineamento. Ci sono casi in cui scopri che il processore ha problemi con l'allineamento dei dati, il che si traduce in un errore di programmazione. IL memcpy() E memcmp() i metodi in C++ sono le migliori opzioni in questa situazione.
Nota: memset è una vecchia funzione ereditata da C. Non è molto flessibile quando si riempie la memoria con diversi tipi e valori di dati. IL std::riempi la funzione è un'alternativa migliore disponibile nella libreria dell'algoritmo STL.