C Programmazione

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 in un blocco di memoria byte per byte. Questa funzione è utile per l'inizializzazione di un blocco di memoria byte per byte da un particolare valore. In questo articolo vedremo nel dettaglio come si può utilizzare questa funzione. Quindi iniziamo.

File di intestazione:

1
corda.h

Sintassi:

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

Questa funzione imposta il primo byte del blocco di memoria puntato da str di ch.

Argomenti:

La funzione accetta 3 argomenti:

  1. str: Questo è il puntatore della posizione di memoria in cui verrà impostata la memoria. Questo è un puntatore void, quindi possiamo impostare qualsiasi tipo di blocco di memoria, ma la memoria sarà impostata byte per byte.
  2. ch: Questo è il valore che deve essere copiato nel blocco di memoria. Questo è un valore intero, ma viene convertito in un carattere senza segno prima di essere copiato.
  3. n: Questo è il numero di byte nel blocco di memoria che è impostato.

Valori restituiti:

memset() restituisce il primo indirizzo del blocco di memoria da cui inizia ad impostare il valore.

Esempi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Esempio 1.c
#includere
#includere
intero principale()

char str[30] = "ABCD EFGH";
printf("Prima di memset => %s",str);
memset(str,'x',3);
printf("\nDopo memset => %s\n",str);
restituisce 0;


Nell'esempio1.c, abbiamo dichiarato un array di caratteri di dimensione 30. Poi lo abbiamo inizializzato con la stringa “ABCD EFGH.” Nella funzione memset, abbiamo passato 3 argomenti str, 'x' e 3. Quindi, il blocco di memoria puntato da str verrà ripristinato i primi 3 caratteri da "x".' Dopo memset, quando stampiamo la memoria, otterremo "xxxD EFGH."

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Esempio2.c
#includere
#includere
intero principale()

char str[30] = "ABCD EFGH";
printf("Prima di memset => %s",str);
memset(str+4,'x',3);
printf("\nDopo memset => %s\n",str);
restituisce 0;


Nell'esempio2.c, abbiamo passato str+4 alla funzione memset. Quindi, ha ripristinato la memoria dopo la 4a posizione di str.  Dopo memset, quando stampiamo la memoria, otterremo "ABCDxxxGH."

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Esempio3.c
#includere
#includere
intero principale()

int arr[5],i;
memset(arr,10,5*sizeof(arr[0]));
printf("\narr elementi => \n");
for(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
restituisce 0;


Nell'esempio 3.c, abbiamo dichiarato un array intero di dimensione 5 e stiamo cercando di inizializzarlo di 10. Ma dall'output, abbiamo visto che l'array non è inizializzato da 10; invece abbiamo il valore “168430090”. Questo perché il valore interoèmaggiore di un byte e la funzione memset converte il valore in un carattere senza segno prima di essere copiato. Ora vedremo come otterremo il valore "168430090".


La rappresentazione binaria di 10 è 00000000 00000000 00000000 00001010.

Quando l'intero viene convertito in un carattere senza segno, viene considerato il 1 byte inferiore. Quindi, quando 10 viene convertito in char senza segno, è una rappresentazione binaria 00001010.

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Esempio4.c
#includere
#includere
intero principale()

int arr[5],i;
memset(arr,0,5*sizeof(arr[0]));
printf("\narr elementi => \n");
for(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
restituisce 0;


Nell'esempio4.c, abbiamo inizializzato l'array intero con 0. Tutti i bit della rappresentazione binaria di 0 sono 0. Quindi l'array è inizializzato da 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Esempio5.c
#includere
#includere
intero principale()

int arr[5],i;
memset(arr,-1,5*sizeof(arr[0]));
printf("\narr elementi => \n");
for(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
restituisce 0;


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

Conclusione:

In questo articolo, abbiamo visto usando 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 in un blocco di memoria. La funzione Memset è più veloce per impostare una grossa fetta di memoria contigua rispetto alla semplice impostazione della posizione usando un ciclo.

Come modificare le impostazioni del mouse e del touchpad utilizzando Xinput in Linux
La maggior parte delle distribuzioni Linux viene fornita con la libreria "libinput" per impostazione predefinita per gestire gli eventi di input su un...
Rimappa i pulsanti del mouse in modo diverso per software diversi con X-Mouse Button Control
Forse hai bisogno di uno strumento che possa cambiare il controllo del tuo mouse con ogni applicazione che utilizzi. In questo caso, puoi provare un'a...
Recensione del mouse wireless Microsoft Sculpt Touch
Ho letto di recente del Microsoft Scolpisci il tocco mouse wireless e ho deciso di acquistarlo. Dopo averlo usato per un po', ho deciso di condividere...