Come viene utilizzata la funzione Memset

Come viene utilizzata la funzione Memset

In C, la funzione Memset () viene utilizzata per impostare un valore di un byte su un byte a blocchi di memoria per byte. Questa funzione è utile per l'inizializzazione di un byte a blocchi di memoria per byte con un valore particolare. In questo articolo, vedremo in dettaglio come questa funzione può essere utilizzata. Quindi iniziamo.

File di intestazione:

corda.H

Sintassi:

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

Questa funzione imposta la prima N byte del blocco di memoria puntato da str di cap.

Argomenti:

La funzione prende 3 argomenti:

  1. str: Questo è il puntatore della posizione della memoria in cui verrà impostata la memoria. Questo è un puntatore vuoto, quindi possiamo impostare qualsiasi tipo di blocco di memoria, ma la memoria verrà impostata per byte.
  2. cap: Questo è il valore che deve essere copiato nel blocco di memoria. Questo è un valore intero, ma viene convertito in un carattere non firmato prima di copiare.
  3. N: Questo è il numero di byte nel blocco di memoria che è impostato.

Valori di ritorno:

memset () Restituisce il primo indirizzo del blocco di memoria da dove inizia a impostare il valore.

Esempi:

//Esempio 1.C
#includere
#includere
int main ()

char str [30] = "abcd efgh";
printf ("prima di memset => %s", str);
memset (str, 'x', 3);
printf ("\ nafter memset => %s \ n", str);
restituzione 0;


Nell'esempio1.C, abbiamo dichiarato una matrice di caratteri di taglia 30. Quindi l'abbiamo inizializzato con la stringa “ABCD EFGH."Nella funzione Memset, abbiamo superato 3 argomenti str, 'x' e 3. Quindi, il blocco di memoria puntato da STR verrà ripristinato i primi 3 caratteri di 'x.'Dopo memset, quando stampiamo la memoria, otterremo “xxxd efgh."

// Esempio2.C
#includere
#includere
int main ()

char str [30] = "abcd efgh";
printf ("prima di memset => %s", str);
memset (str+4, 'x', 3);
printf ("\ nafter memset => %s \ n", str);
restituzione 0;


Nell'esempio2.C, abbiamo passato STR+4 alla funzione Memset. Quindi, ripristinò la memoria dopo la 4a posizione di STR. Dopo il memset, quando stampiamo la memoria, otterremo “Abcdxxxgh."

// Esempio3.C
#includere
#includere
int main ()

int arr [5], i;
memset (arr, 10,5*sizeof (arr [0]));
printf ("\ narration elements => \ n");
per (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
restituzione 0;


Nell'esempio3.C, abbiamo dichiarato una serie di interi di dimensione 5 e cercando di inizializzarla di 10. Ma dall'output, abbiamo visto che l'array non è inizializzato di 10; Invece, abbiamo ottenuto il valore "168430090". Questo perché il valore intero è maggiore di un byte e la funzione Memset converte il valore in un carattere non firmato prima di copiare. Ora vedremo come otterremo il valore "168430090".


La rappresentazione binaria di 10 è 00000000 00000000 00000000 00001010.

Quando l'intero convertito in carbone non firmato, viene considerato il byte inferiore. Quindi, quando 10 vengono convertiti in carattere senza segno, è una rappresentazione binaria è 00001010.

La funzione Memset () imposta il byte di posizione della memoria per byte. Quindi, un totale di 4 byte sarà: 00001010 00001010 00001010 00001010.

Il valore decimale della rappresentazione binaria di 4 byte è 168430090.

// Esempio4.C
#includere
#includere
int main ()

int arr [5], i;
memset (arr, 0,5*sizeof (arr [0]));
printf ("\ narration elements => \ n");
per (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
restituzione 0;


In Esempio4.C, abbiamo inizializzato l'array intero di 0. Tutti i bit della rappresentazione binaria di 0 sono 0. Quindi l'array è inizializzato da 0.

// Esempio5.C
#includere
#includere
int main ()

int arr [5], i;
memset (arr, -1,5*sizeof (arr [0]));
printf ("\ narration elements => \ n");
per (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
restituzione 0;


Nell'esempio5.C, abbiamo inizializzato l'array intero di 0. Tutti i bit della rappresentazione binaria di -1 sono 1. Quindi l'array è inizializzato da -1.

Conclusione:

In questo articolo, abbiamo visto utilizzando la funzione Memset come possiamo inizializzare o impostare il valore di un blocco di memoria in modo efficiente. Possiamo impostare qualsiasi carattere e 0 o -1 come valore intero su un blocco di memoria. La funzione Memset è più veloce per impostare un grosso pezzo di memoria contigua rispetto alla semplice impostazione della posizione utilizzando un loop.